什么是线程的同步,线程的同步要注意什么?

根据一篇文章,精简了一下关于线程同步的知识

什么是线程同步,为什么要同步
1. 线程同步=线程排队
2. 多个线程访问共享的资源才需要同步
3. 多个线程读取常量不用同步,读取变量才要同步,即涉及线程要要对数据修改才同步
4. 多个线程访问共享资源的代码有可能是同一份代码,也有可能是不同的代码;无论是否执行同一份代码,只要这些线程的代码访问同一份可变的共享资源,这些线程之间就需要同步。
如何线程同步
1. 给共享资源的访问加同步锁(注意,为什么不是在每个对象里添加锁机制?没必要,因为同步是很耗资源的)
2. 同步锁是加在访问共享资源的代码段上的
3. 如果访问同一份共享资源,加的是不同的同步锁,并不起到同步的作用,且该同步锁没有任何意义,也就是关键要判断该锁是否是同一同步锁
4. 也就是说,同步锁本身也一定是多个线程之间的共享对象
5. 如函数体内部产生的同步锁,对于多线程不是同一个同步锁(具体看例子)
6. 任何一个Object Reference都可以作为同步锁
7. 是否是同一个同步锁,也就是看同步代码间,synchronized关键字是否使用同一个Object Reference,即同一个内存地址
8. 可以使用类的static final的属性对象作同步锁,使用final就是为了保证引用不要改变,保证同一个同步锁
9. 由于同步的范围越小越好,同步的代码块越少越好,所以不同的共享资源,要使用不同的同步锁,即缩小同步粒度

原文地址:https://www.cnblogs.com/jianglong-liang/p/3330862.html