1.线程是什么
线程定义是cpu执行任务的最小单元。也就是说,每当cpu执行任务时,就会有线程,但是线程的数量不确定。它是容纳任务动作的一个容器,当你将一整个任务都视为一个动作去启动,就如我们只在一个方法中完成我们所需要的操作,那么这就只有一个线程。当我们将整个任务的动作拆解,每个动作都为它创建不同的线程实现,最后组合就是多线程的方式。方法的调用不是多线程,它只不过是将整体某一个的动作放在另外的地方,最后这个动作仍然归属于调用它的那个方法。这就是为什么Thread类需要调用start()方法,而不是调用run()的方法。
2.线程的基本创建方式
1)继承thread类
2)实现runnable接口
3)实现callable接口
3)线程池
3.为什么使用线程
1)提高效率
多个人干活总比一个人干活快。在某些情况下,一个任务的动作是可以并行处理的,那么就可以分别使用一个线程去调用,然后组合结果。但是当每个动作耗时都很少,那就没有必要去使用多线程的方式了,这个对效率的提升不高,并且浪费了cpu资源。
2)异步调用
当这个任务需要多个系统通力合作,这个方法就需要调用不同的系统去完成某一个动作,但是这个方法又不在本地,就可以通过创建线程去调用。
4.如何使用
在我这种入门级的程序员来说,只有在完整的总系统中才会创建线程池,放置在配置中,以供各个子系统使用。当某一个方法需要简单的异步调用我会直接使用callable接口,这样比较快捷方便。当真正需要进行异步编排提高效率时,我会使用comparableFuture加上线程池来完成。