/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

多线程进阶

* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* @author Alan
* @Email no008@foxmail.com

 

正文

 
主题:多线程进阶

多线程的一些核心内容以及要关注的细节。

一、线程的实现

继承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实现多线程。

posted @   一品堂.技术学习笔记  阅读(483)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示

目录导航