摘要: 如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。实现Runnable接口或callable接口,适合多个相同或不同的程序代码的线程去共享同一个资源。 多个线程共享数据分两种情况: 1、如果多个线程执行同一个Runnable实现类中的代码,此 阅读全文
posted @ 2021-02-25 17:53 周文豪 阅读(4493) 评论(0) 推荐(0)
摘要: 总结: 1、volatile变量没有真正独立于其他变量和自己以前的值时,volatile无法保证原子性,此时可以使用synchronized和ReentrantLock来解决原子性问题 2、volatile变量真正独立于其他变量和自己以前的值时可以使用 volatile 代替 synchronize 阅读全文
posted @ 2021-02-25 15:19 周文豪 阅读(352) 评论(0) 推荐(1)
摘要: synchronized是重量级锁,效率不高。但在jdk 1.6中对synchronize的实现进行了各种优化,使得它显得不是那么重了。jdk1.6对锁的实现引入了大量的优化,如自旋锁、自适应自旋锁、锁消除、锁粗化等技术来减少锁操作的开销。 锁主要存在四中状态,依次是:无锁状态、偏向锁状态、轻量级锁 阅读全文
posted @ 2021-02-25 11:46 周文豪 阅读(808) 评论(0) 推荐(0)
摘要: Java内存模型就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。 Java内存模型是根据英文Java Memory Model(JMM)翻译过来的。其实JMM并不像JVM内存结构一样是真实存在的。他只是一个抽象 阅读全文
posted @ 2021-02-25 10:41 周文豪 阅读(858) 评论(0) 推荐(0)
摘要: 多线程死锁:同步中嵌套同步,导致锁无法释放。 死锁解决办法:不要在同步中嵌套同步 public class Demo06DeadLock { public static void main(String[] args) { //创建线程任务对象 Ticket ticket = new Ticket( 阅读全文
posted @ 2021-02-25 09:56 周文豪 阅读(91) 评论(0) 推荐(0)