程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

创建线程的几种方式(JAVA) 创建线程的几种方式java

balukai 2024-12-27 11:56:46 文章精选 8 ℃

前言

上篇文章已经说清了线程的生命周期和一些基础,本章主要讲在JAVA中创建线程的几种方式。

创建线程的几种方式

1、实现Runnable接口

public class CreateThreadDemo {
    static class RunnableDemo implements Runnable {

        @Override
        public void run() {
            System.out.println("已经运行了RunnableDemo。。");
        }
    }
    public static void main(String[] args) {
        Thread thread = new Thread(new RunnableDemo());
        thread.start();
    }
}

这种方法实现了Runnable接口,这样的话,具体的实现就放在RunnableDemo中,这样的RunnableDemo具体的业务处理就在RunnableDemo.run()方法中处理了,参数的传递的话,也可以在RunnableDemo类中设定。这种方法在日常开发中也是挺常见的一种形式。

2、继承Thread类;但是Thread也是实现了Runnable接口。

public class CreateThreadDemo {
    static class ThreadDemo extends Thread {

        @Override
        public void run() {
            System.out.println("已经运行了ThreadDemo。。");
        }
    }
    public static void main(String[] args) {
        ThreadDemo threadDemo = new ThreadDemo();
        threadDemo.start();
    }
}

有些人可能会很好奇,Thread.start后最终会调用run方法去执行里面的程序。这个在后面使用锁知识的时候再来讲这块。

3、实现Callable接口

public class CreateThreadDemo {
    static class CallableDemo implements Callable<Integer> {

        @Override
        public Integer call() throws Exception {
            System.out.println("CallableDemo执行了");
            return 1;
        }
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        Callable callable = new CallableDemo();
        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        Future<Integer> future = threadPool.submit(callable);
        System.out.println(future.get());
      	//注意,这里用完线程池,记得关掉
        threadPool.shutdown();
    }
}

有些人会很好奇,为啥你会知道使用Executors呢?

其实在官方文档中也指出了可以用Executors去创建线程池来执行Callable接口的实现类。

总结

从上面不难看出,在JAVA中创建线程大概有以上3种方式,前两种是去实现Runnable接口,而后者去实现类Callable接口。两者不同的区别是,后者是可以返回值的。后面再详细源码分析。

一天一个java相关小知识。喜欢的同学,可以点赞、关注+收藏,后期还会推出其他框架源码分析。

如果有需要补充的地方,留言区见。

Tags:

最近发表
标签列表