Java多线程——synchronized(内建锁)机制
一、synchronized对象锁相关概念
学习synchronized机制前先提出几个问题
为什么要使用synchronized进行同步(加锁)操作?
synchronized的应用场景及注意事项是什么?
1、为什么要使用synchronized进行同步(加锁)操作:
多个线程对同一个对象中的实例变量(所有线程共有的)进行并发访问时,会产生“脏读”,取到的数据是被更改过的。因此使用synchronized进行同步操作,避免"脏读"的出现,保证线程安全。
2、synchronized的应用场景与注意事项:
①只有共享资源
的读写访问才需要同步化
,如果不是共享资源
,没有同步的必要
。(多个线程有需要共享的东西时,才需要加锁;没有需要共享的东西(每个线程都拥有),就不需要加锁)
②多个线程只是在分别调用线程类的run()方法,其他方法或属性是共享的。
通过进一步的学习提出以下问题
方法中的变量(局部变量)与实例变量是否线程安全?