实现多线程方法有哪些
实现多线程方法
继承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)!