java多线程总结
来源:互联网 发布:网络课考古发现与探索 编辑:程序博客网 时间:2024/06/05 23:45
一、
1、执行完同步代码块,就会释放锁
2、在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放
3、在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进
入对象的等待池
除了以上情况以外,只要持有锁的线程还没有执行完同步代码块,就不会释放锁。
在下面情况下,线程是不会释放锁的:
1、执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
2、在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
3、在执行同步代码块的过程中,其他线程执行了当前线程对象的suspend()方法,当前线程被暂停,但不会释放锁。
二、避免在构造函数中启动一个线程,因为会带来子类化问题并且会引起this逸出
三、volatile变量正确使用:
1、一个线程修改变量后,其他线程都能看到
2、防止重排序发生
3、适合一个线程写操作,其他多线程读操作的场景
四、ReentrantReadWriteLock使用场景:在读多写少的场景下
五、解决伪共享:解决伪共享的方法是通过补齐(Padding),使得每一条缓存行只存一个多线程变量,
因为一般缓存行的大小是64字节。这意味着,小于64字节的变量,是有可能存在于同一条缓存行的。
例如变量X大小32字节,变量Y大小32字节,那么他们有可能会存在于一条缓存行上
0 0
- 【多线程】java多线程知识点总结
- java多线程使用总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- java多线程学习总结
- Java多线程编程总结
- Java多线程编程总结
- java多线程学习总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java多线程编程总结
- Java 多线程总结
- Java多线程编程总结
- Java多线程编程总结
- 【C++系统服务】监控程序内存占用
- flash
- 通过信号量的方法发送数据
- STS 3.6.4 SpringMVC 4.1.6 Hibernate 4.3.8 MySQL
- eclipse启动时提示android XML Editor Error?上午还没事,重启电脑就这样 了
- java多线程总结
- 正确使用Block避免Cycle Retain和Crash
- leetcode 221: Maximal Square
- DNS的基本和高级配置
- (六) Python的条件判断和循环
- ArcGIS For Android ExportTileCache应用
- JDBC使用详解
- 浅析PageRank算法
- jsp和EL表达式 : pageContext.findAttribuate("") page域--->request--->session--->application