1. 使用多线程的原因
-
想要节省时间,或者是数据量大时,都可以使用多线程
i:比如说:在项目中 上传文件或下载文件时候,每个文件都可看做是独立的,但是他们都是做同一件事情,那就是上传,都是调用了上传的方法。那样就是方法体是公用的。不相同的是文件体(文件流,属性)。所以就是可以用多线程的方式去启动调用上传方法啊
i:比如说:需要将List里面的东西都执行一遍的话,也可以选择是多线程去执行啊
2.多线程使用方法
- 实现runnable接口
- 继承Thread类
- 实现callable接口
其中runnable,Thread是没有返回值的,callable才有返回值,而且是阻塞式的,可接受报错.
● runable,Thread没有返回值,但是可以利用公共资源获取线程执行的值,但是这两个是异步的,所以需要阻塞感知的话,需要利用 java.util.concurrent.CountDownLatch 计算类去阻塞异步线程
最终等待得到结果,而这个结果可以是一个安全的公共资源
List–>Collections.synchronizedList/CopyOnWriteArrayList/ConcurrentHashMap
如图:
● callable的话可以使用 Future 对象来接受
如图: