多线程进阶
主题:多线程进阶
多线程的一些核心内容以及要关注的细节。
一、线程的实现
继承thread类重写run()方法和实现Runnable接口实现run()方法
注意点:new线程实例时建议加线程名和要处理下线程的中断异常([InterruptedException])
二、不得不提的[ThreadLocal]
顾名思义:线程局部变量,提高性能,可以理解为对线程的“工厂模式”。
注意点:不能解决多线程环境下的数据共享的问题。
使用[ThreadLocal],一般都是声明在静态变量中。如果不断的创建[ThreadLocal]而且没有调用其remove方法,将会导致内存泄露。如果是static的[ThreadLocal],一般不需要调用remove。
三、线程的同步与锁
普通锁:Synchronized。方法上(静态或非静态)加。
读写锁:接口[ReadWriteLock]、实现[ReentrantReadWriteLock]。性能高,一般建议用这个。
四、线程的调度
wait/(notify/notifyAll())机制
同在Synchronized代码块中有效。
wait/sleep的区别
wait释放锁,sleep没有。
线程的让步yield()和合并join()
五、阻塞队列
java.util.concurrent.[BlockingQueue]、[ArrayBlockingQueue], [DelayQueue], [LinkedBlockingQueue], [PriorityBlockingQueue], [SynchronousQueue]
为多线程的排队等候的业务场景开辟了便捷通道,非常有用
六、线程池
Executors、[ExecutorService和Future]
Future的get ()和get (long timeout, [TimeUnit] unit)方法
对有高性能要求的中间件或者定时任务的实现非常有用。如我们的R系统
最后火青还给大伙总结要注意以下三点:
1、编码时要注意静态或者非静态成员变量等是否有线程不安全问题。
2、不要随便使用Synchronized。
3、尽量用java5的自带的api实现多线程。
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/