线程随笔
来源:互联网 发布:madness淘宝店哪个真 编辑:程序博客网 时间:2024/05/21 06:32
每次线程调用变量时是直接取自己的工作存储器中的值还是先从主存储器复制再取是没有保证的;
线程改变变量的值之后,是否马上写回到主存储器上也是不可保证的;
当线程进入或者离开同步代码块时会将私有拷贝与共享内存中的原始值进行比较;
线程在试图读取一个volatile变量时,会从主内存区中读取最新的值;
ReentrantLock是具有和synchronized类似功能的性能功能加强版同步锁;
synchronized缺点:1.未得到锁的线程只能不停的尝试获得锁,而不能中断。这种情况对于大量的竞争线程会造成性能的下降等后果;2.只有一个condition(即synchronized针对的对象锁)与锁相关联;
针对synchronized的缺点,JDK5提供了ReentrantLock;
ReentrantLock提供了lockInterruptibly()方法可以优先考虑响应中断,而不是像synchronized那样不响应interrupt()操作。解释一下响应中断是什么意思:比如A、B两线程去竞争锁,A得到了锁,B等待,但是A有很多事情要处理,所以一直不返回。B可能就会等不及了,想中断自己,不再等待这个锁了,转而处理其他事情。在这种情况下,synchronized的做法是,B线程中断自己(或者别的线程中断它),我不去响应,继续让B线程等待,你再怎么中断,我全当耳边风。而lockInterruptibly()的做法是,B线程中断自己(或者别的线程中断它),ReentrantLock响应这个中断,不再让B等待这个锁的到来。有了这个机制,使用ReentrantLock时就不会像synchronized那样产生死锁了;
ReentrantLock在提供了多样的同步功能(除了可响应中断,还能设置时间限制),因此在同步比较激烈的情况下,性能比synchronized大大提高(按:原因主要是可以中断等待的线程);
同步竞争不激烈的情况下,synchronized还是非常合适的;
- 线程随笔
- 线程随笔
- 线程,事件,同步随笔
- 进程、线程知识点随笔
- 再敲线程 随笔
- GCD线程随笔
- Posix线程学习随笔 - 1
- JAVA随笔--进程与线程
- 随笔-spingmvc controller线程安全
- JAVA随笔——线程的交互
- 随笔之如何实现一个线程池
- Linux进程与线程学习随笔
- Qt随笔之Qt线程同步
- 随笔之如何实现一个线程池
- 随笔之如何实现一个线程池
- 【Android开发学习笔记】【随笔】UI线程
- C++进阶—>线程同步随笔
- 随笔
- 简单的调试错误,修改方式。
- 嵌入式开发学的东西还不是一般的多
- 掌上快递 APP 项目之概述篇
- QSharedMemory: how to use
- 关于STM32外部中断EXTI10-15,EXTI5-9共用一个中断向量处理方法
- 线程随笔
- Node.js自动化测试及大规模性能测试技术实现(Java&Node.JS)
- 风云
- OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
- nefu1010裸的欧拉函数
- Odoo(OpenERP)开发实践:通过XML-RPC接口访问Odoo数据库
- Revision to QSharedMemory usage
- Mac OS X 下 su 命令提示 sorry 的解决方法
- 黑马程序员------OC Foundation框架