多线程知识总结

1、多线程的作用
(1)发挥多核CPU的优势
(2)防止阻塞
(3)便于建模
2、创建方式
(1)继承Thread类 (java.lang.Thread)
(2)实现Runnable接口 (java.lang.Runnable)
注:这两种方式的关系:从jdk源码可以看出,Thread类还是实现了Runnable接口。
3、关于start()方法和run()方法
只有调用start()方法,才会体现出多线程的特性。如果只是调用run(),那么线程还是同步进行,得等一个线程run完成后,下个线程才能继续执行。
4、Runnable和Callable区别
Runnable是在java.lang下,而Callable是在java.util.concurrent下。
Runnable中run方法没有返回值,而Callable中call方法有返回值,并且是泛型。和Future、FutureTask配合获取异步执行的结果。
注:这其实是很有用的一个特性,因为多线程相比单线程更难、更复杂的一个重要原因就是因为多线程充满着未知性,某条线程是否执行了?某条线程执行了多久?某条线程执行的时候我们期望的数据是否已经赋值完毕?无法得知,我们能做的只是等待这条多线程的任务执行完毕而已。而Callable+Future/FutureTask却可以获取多线程运行的结果,可以在等待时间太长没获取到需要的数据的情况下取消该线程的任务,真的是非常有用
5、CyclicBarrier和CountDownLatch的区别
两个看上去有点像的类,都在java.util.concurrent下,都可以用来表示代码运行到某个点上,二者的区别在于:
(1)CyclicBarrier的某个线程运行到某个点上之后,该线程即停止运行,直到所有的线程都到达了这个点,所有线程才重新运行;CountDownLatch则不是,某线程运行到某个点上之后,只是给某个数值-1而已,该线程继续运行
(2)CyclicBarrier只能唤起一个任务,CountDownLatch可以唤起多个任务
(3)CyclicBarrier可重用,CountDownLatch不可重用,计数值为0该CountDownLatch就不可再用了
6、

猜你喜欢

转载自blog.csdn.net/lwl20140904/article/details/79930758
今日推荐