Java进阶day41
【使用代码模拟两个线程对同一个账户进行取款】
【Test()方法】

【账户进程类】



【账户线程类】

---------------------------------------------------
【使用线程同步机制】
【账户类】【synchronized(共享的对象){线程同步代码块}】




【线程同步代码块的工作原理】【锁】


【线程生命周期补充锁池lockpool不是一个状态】【线程运行过程中遇到synchronized进入锁池lockpool】

【synchronized()括号内的对象应该是this】

比如

---------------------------------------------
【局部变量永远不会共享,因此不存在线程安全问题】
【另外两个为什么共享,因为所在的区只有一个,而局部变量存在着的栈可以有多个】


【另一种方式】

【账户进程类】

【局部变量建议使用StringBuilder】P791 632

【synchronized()修饰实例方法时的优缺点】
【优点:简化代码】【缺点:共享对象只能是this(指向多个线程共享的一个进程对象),导致整个方法体都会同步,执行效率降低】


【synchronized()写法总结】【对象锁,保证实例变量的安全】【类锁:保证静态变量的安全】

-------------------------------------------------
【synchronized()面试题】



不需要等待,因为doOther()没有被synchronized()修饰
-----------------------------------------------------------------------------------
【synchronized()面试题】
和上一题相似,如图

【synchronized()面试题3】和上题相似,作下图更改

【synchronized()面试题4】和上题相似,作下图更改

【这里synchronized()的锁是排它锁,后面还有互斥锁】
---------整理自B站动力节点
浙公网安备 33010602011771号