您现在的位置是:首页» 生活» 进程同步和线程同步有什么区别吗,实现线程同步的几种方式总结

进程同步和线程同步有什么区别吗,实现线程同步的几种方式总结

2023-09-11 08:27:26
今天小编为大家分享生活中的小常识、日常问题解答等相关内容,希望能够帮助大家。1、也就是用synchronized关键字修饰的方法(所有访问状态变量的方法都必须同步)。此时,充当锁的对象是调用synchronized方法的对象。在调用这个方法之前,需要获取内置锁,否则会被阻塞。synchronized关键字也可以修饰静态方法,在这种情况下,如果调用静态方法,整个类都将被锁定。2、同步代码块3、也就是用synchronized关键字修饰的语句块。锁的粒度更细,充当锁的对象不一定是这个,也可以是其他对象,使用起

今天小编为大家分享生活中的小常识、日常问题解答等相关内容,希望能够帮助大家。

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停止等待,等足够长的时间后再做别的事情。

本文到此结束,希望对大家有所帮助。

Www.yiLeen.com.CN艺莲園提供生活百科,美食,购物,旅游,房产,交通,家居,数码,科技,财经,教育,健康,娱乐,历史,汽车,生活消费门户网站

本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

联系邮箱:773537036@qq.com

标签: 线程 种方法