Java 实现多线程的几种方式汇总

继承 Thread 类很简单。
但耦合比较高,不推荐使用。
实现可执行的解耦。
适合多线程数据共享场景。
实现 Callable 以返回值。
适合爬虫等复杂的计算任务。
未来可以监控结果。
该项目使用Java爬虫和Callable+Future来监控其进度。
Future.get() 阻塞等待结果。
将 FutureTask 与 ExecutorService 结合使用。
你自己掂量一下吧。

JAVA多线程有哪几种实现方式

严格来说,JAVA中实现多线程的方式主要有3 种。
继承Thread类; Runnable接口和ExecutorService的实现;使用 Callables 和 Future。
其实很简单,但是有几点需要注意。

我们先来说说最重要的事情。
继承Thread类的方法很简单,但是有一个重要的细节。
这意味着JAVA不支持多重继承,所以这个方法不能继承其他类。
我们去年做的项目中,因为一个类继承了其他类;我们选择实现 Runnable 接口。

还有一点是,Runnable接口的实现方式更加灵活,因为它可以通过继承的方式与其他类共存。
例如,如果我们有 anotherClass 类,并且想要创建一个线程来执行它,那么我们实现 Runnable 接口后,我们可以将实现 Runnable 接口的实例传入到 Thread 中。

一开始ExecutorService,我以为使用Callable和Future只是为了获取返回值,后来发现我错了。
事实上,这个方法的威力更大。
将此与线程池结合起来管理线程并提高效率。
例如,我们有大约 3 ,000 个工作岗位。
线程池通过使用它,您可以高效地分配资源,避免创建多个线程造成的资源浪费。

等一下,还有一件事使用 Callable 接口的任务可以抛出异常,但使用 Runnable 接口的任务则不能。
很多人不关心这个,但我认为值得一试。

最后,在使用多线程时,要特别注意线程安全问题,避免数据不对称。
用俚语来说,这称为雪崩效应。
事实上,前面的耽搁就耽误了后面的一切。
很多人都掉进了这个陷阱。

.NET中Thread、Task或Parallel实现多线程的使用总结