线程同步(线程同步是什么意思)
大家好,今天就和小花一起来看看这个问题吧 。线程同步是什么意思,线程同步很多人还不知道,现在让我们一起来看看吧!
1、 也就是用synchronized关键字修饰的方法(所有访问状态变量的方法都必须同步)。此时,充当锁的对象是调用synchronized方法的对象。在调用这个方法之前,需要获取内置锁,否则会被阻塞。synchronized关键字也可以修饰静态方法,在这种情况下,如果调用静态方法,整个类都将被锁定。
2、 同步代码块
3、 也就是用synchronized关键字修饰的语句块。锁的粒度更细,充当锁的对象不一定是这个,也可以是其他对象,使用起来更灵活。
4、 同步是一项开销很大的操作,因此应该尽量减少同步的内容。通常不需要同步整个方法,只需要使用同步的代码块来同步关键代码即可。
5、 一开始我们谈到了内置锁的引入,也就是互斥。线程A得到互斥体后,线程B阻塞,直到线程A释放互斥体,然后线程B就可以得到相同的互斥体。但是在上面的代码中,主线程并不同步状态对象,所以在锁定状态对象时不需要阻塞线程,可以直接操作状态对象。因此,所有使用同步对象的地方都必须同步。
6、 修改方法是打开注释的代码。
7、 如果锁对象是静态变量或者静态方法是用synchronized关键字修饰的,则锁对象是类对象。
8、 使用特殊域变量(volatile)实现线程同步
9、 (1).volatile关键字提供了访问域变量的无锁机制;
10、 (2).用volatile修改域,相当于告诉虚拟机,这个域可能会被其他线程更新;
11、 (3).因此,每次使用该字段时都需要重新计算,而不是使用寄存器中的值;
12、 (4).volatile不会提供任何原子操作,也不能用来修改final类型的变量;
13、 利用重入锁实现线程同步
14、 在Java1.5中,添加了一个java.util.concurrent包来支持同步。
15、 ReentrantLock类是一个可重入的互斥锁,它实现了锁接口。它具有与synchronized相同的并发性和内存语义。此外,还有更多锁投票、定时锁等待和中断锁等待。
16、 线程A和线程B要获取对象O的锁,假设A获取了对象O的锁,B会等待A释放对象O的锁;
17、 如果使用synchronized,如果A不释放,B将永远等待,不能中断;
18、 如果使用ReentrantLock,如果A没有被释放,可以让B停止等待,等足够长的时间后再做别的事情。
这篇文章到此就结束,希望能帮助到大家。
扫描二维码推送至手机访问。
版权声明:文章内容摘自网络,如果无意之中侵犯了您的版权,请联系本站,本站将在3个工作日内删除。谢谢!