自学内容网 自学内容网

实现多线程方法有哪些

实现多线程方法

继承Thread类;

实现Runnable接口;

实现Callable接口通过FutureTask包装器来创建Thread线程;

使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService)

继承Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方式就是通过调用start()实例方法。start() 方法是一个native方法,它将启动一个新线程,并执行run()方法。

这时候我们再来看一下实现Runnable接口的方式,因为一个类他可能继承了其他类,由于java对类来说是单继承,所以这里只能实现接口。他的线程开启方式是将自己赋给Thread对象中,通过该对象调用run方法

而上面两种事实上实现一种无返回结果任务。当我们需要实现有返回结果的任务,就必须通过实现Callable接口,重写call方法,执行器(线程池接口ExecutorService)执行该任务后返回一个Future对象,在该对象中调用get方法就可以获得Callable任务返回的Object了。在结合线程池接口ExecutorService,就可以实现传说中的又返回结果的多线程了。

备注:

 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 ​
 class MyCallable implements Callable<String> {
     @Override
     public String call() throws Exception {
         // 模拟耗时任务
         Thread.sleep(2000);
         return "任务完成!";
     }
 }
 ​
 public class CallableExample {
     public static void main(String[] args) throws InterruptedException, ExecutionException {
         // 创建线程池
         ExecutorService executorService = Executors.newFixedThreadPool(2);
 ​
         // 提交 Callable 任务
         Future<String> future1 = executorService.submit(new MyCallable());
         Future<String> future2 = executorService.submit(new MyCallable());
 ​
         // 获取任务结果
         String result1 = future1.get();
         String result2 = future2.get();
 ​
         System.out.println(result1);
         System.out.println(result2);
 ​
         // 关闭线程池
         executorService.shutdown();
     }
 }


原文地址:https://blog.csdn.net/qq_62097431/article/details/142734239

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!