您的位置 首页 java

聊聊创建线程的几种方式?

  • 继承 Thread 创建 线程

创建一个类,继承Thread类,并重写该类run方法,run方法里面就代表了线程需要完成的任务,具体代码如下:

 public class TestThread  extends  Thread{
    @Override
    public  void  run() {
        super.run();
    }
    public  static  void main(String[] args) {
        TestThread t1 = new TestThread();
        t1.start();
    }
}  
  • 通过Runnable接口创建线程类

创建一个类,实现Runnable接口,一样重写run方法,和上面一样这里run也代表线程需要完成的任务,具体代码如下:

 public class TestThread2 implements Runnable{
    @Override
    public void run() {

    }
    public static void main(String[] args) {
        TestThread2 runnable  = new TestThread2();
        Thread t2 = new Thread(runnable);
        t2.start();
    }
}  
  • 使用Callable和Future创建线程类

注意:和Runnable接口不一样的是,Callable接口提供一个call()方法来作为线程的执行体,它还有返回值

首先创建一个类,实现Callable接口;第二步使用FutureTask来包装Callable对象,为什么要这么做,是为通过FutureTask的内置方法获取Callable接口的返回值;使用Thread类传入FutureTask来创建并启动线程。具体代码如下:

 public class TestThread3 implements Callable<String> {
    @Override
    public String call() throws  Exception  {
        return "hello world";
    }
    public static void main(String[] args) {
        TestThread3 callable = new TestThread3();
        //通过futureTask取到callable接口的返回值
        FutureTask futureTask = new FutureTask(callable);
        Thread t = new Thread(futureTask);
        t.start();
    }
}  
  • 使用 线程池 创建线程

首先创建一个类,实现Runnable或者Callable接口,然后把这个执行体放到线程池执行,具体代码如下:

 public class TestThread4 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        //()->" hello world ",这个是lambda简写,代表一个实现Runnable接口的类
        executorService.submit(()->"hello world");
    }
}  

总结:我们可以看出,不管使用哪种方式我们都需要实现线程需要具体执行的方法(一般称之为线程执行的任务)。实际项目中的最佳实践是,通过线程池来管理线程创建销毁,接口实现类(Runable、Callable)来创建线程任务,不用Thread类,原因很简单 Java 中只允许单继承没有接口灵活

如果内容对您有帮助,希望您能点赞收藏加关注,激励作者创作出更加优质内容,谢谢!

文章来源:智云一二三科技

文章标题:聊聊创建线程的几种方式?

文章地址:https://www.zhihuclub.com/189051.shtml

关于作者: 智云科技

热门文章

网站地图