首页 > 用户投稿

java 线程状态 多线程编程的时候,使用无锁结构会不会比有锁结构更加快?

多线程编程的时候,使用无锁结构会不会比有锁结构更加快?

这是毋庸置疑的,因为线程加锁其实是很吃资源的!

我们都知道,多线程模型中,为了避免线程之间的数据互串,影响数据安全,都会在方法或者指定的操作上加锁,最原始的加锁方式就是synchronize,这在以前被称为重度锁,因为加锁是违背了多线程模型的效率的!

加锁的原理是什么呢?以a=1a=b+1为例,编译器编译的时候会在这段代码之前加上一个标志比如说lock,同时在这段代码的后面加上标志unlock,在代码运行期间,一个线程进入这段代码之后先把lock置为加锁位,然后下一个线程过来访问这段代码的时候,发现已经上锁,就只能阻塞等待,等到第一个线程执行完了,把状态改了,然后通知后面的线程去继续执行!

当然这是最简化模型的锁,一般锁有读写锁,条件锁,自旋锁等会有不同的唤醒方式和不同的性能消耗!但无论如何,加锁都是在保证数据安全的条件下对多线程性能的污染!

java 线程状态 多线程编程的时候,使用无锁结构会不会比有锁结构更加快?

那么,怎么避免加锁的性能下降呢?

1,从业务上避免大量锁结构的产生!

2,使用threadlocal,这能保证每个线程中的数据不会互相污染!

3,多读少写的情况,使用读写锁!

4,自旋锁会对cpu形成挑战,虽然是线程占用时间很少的锁!

5,锁的粒度尽量小:能在方法内的锁,就不要占用整个方法

志在用通俗易懂的方式学习高新技术,更多的技术分享,会不定时更新,敬请关注。。

java线程状态java线程锁有几种线程锁synchronized

原文标题:java 线程状态 多线程编程的时候,使用无锁结构会不会比有锁结构更加快?,如若转载,请注明出处:https://www.dnheimuer.com/tougao/18891.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「东宁黑木耳网」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。