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站动力节点

posted @ 2020-12-11 22:41  18751612782  阅读(84)  评论(0)    收藏  举报