如何实现线程安全?

 我来答
裤倾墙鱼分1e

2021-11-14 · 贡献了超过596个回答
知道答主
回答量:596
采纳率:4%
帮助的人:23万
展开全部
1: 加锁 利用Synchronized或者ReenTrantLock来对不安全对象进行加锁,来实现线程执行的串行化,从而保证多线程同时操作对象的安全性,一个是语法层面的互斥锁,一个是API层面的互斥锁.
2: 非阻塞同步来实现线程安全。原理就是:通俗点讲,就是先进性操作,如果没有其他线程争用共享数据,那操作就成功了;如果共享数据有争用,产生冲突,那就再采取其他措施(最常见的措施就是不断地重试,直到成功为止)。这种方法需要硬件的支持,因为我们需要操作和冲突检测这两个步骤具备原子性。通常这种指令包括CAS SC,FAI TAS等。
3:线程本地化,一种无同步的方案,就是利用Threadlocal来为每一个线程创造一个共享变量的副本来(副本之间是无关的)避免几个线程同时操作一个对象时发生线程安全问题
帐号已注销
2021-11-14 · 贡献了超过744个回答
知道答主
回答量:744
采纳率:2%
帮助的人:31万
展开全部
1、互斥同步    互斥同步是最常见的一种并发正确性保障手段。同步是指在多线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用(同一时刻,只有一个线程在操作共享数据)。而互斥是实现同步的一种手段,临界区、互斥量和信号量都是主要的互斥实现方式。因此,在这4个字里面,互斥是因,同步是果;互斥是方法,同步是目的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户

2021-11-14
展开全部

ad-hoc 线程封闭
这是完全靠实现者控制的线程封闭,他的线程封闭完全靠实现者实现。
Ad-hoc 线程封闭非常脆弱,应该尽量避免使用。
栈封闭
栈封闭是我们编程当中遇到的最多的线程封闭。
什么是栈封闭呢?
简单的说就是局部变量。
多个线程访问一个方法,此方法中的局部变量都会被拷贝一份到线程栈中。所以局部变量是不被多个线程所共享的,也就不会出现并发问题。所以能用局部变量就别用全局的变量,全局变量容易引起并发问题。

-来自网络,侵删
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大姐捂嘴笑
2021-11-14 · 知道合伙人金融证券行家
大姐捂嘴笑
知道合伙人金融证券行家
采纳数:3314 获赞数:377920
河南化工工程师

向TA提问 私信TA
展开全部
按照“线程安全”的安全程度由强到弱来排序,我们可以将java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2021-11-14 · 超过18用户采纳过TA的回答
知道答主
回答量:1776
采纳率:5%
帮助的人:75.1万
展开全部
当多个线程访问某个方法时,不管你通过怎样的调用方式或者说这些线程如何交替的执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类时线程安全的。
如果一段代码可以保证多个线程访问的时候正确操作共享数据,那么它是线程安全的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(27)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式