为了账号安全,请及时绑定邮箱和手机立即绑定

java 线程同步问题

java 线程同步问题

MMMHUHU 2019-03-06 09:11:47
如下两个线程类:public class A implements Runnable{    private StringBuilder sb;        @Override    public void run() {        //操作sb缓冲        .......    }    public StringBuilder getsb() {        return sb;    }    public void setsb(StringBuilder sb) {        this.sb = sb;    }}public class B implements Runnable{    //此处得到A类的对象a        @Override    public void run() {        //操作a.getsb()缓冲        .......    }}如何能保证,A、B互斥?A的线程在操作sb的时候加锁,让B不能操作;或者B的线程在操作sb的时候加锁,让A不能操作始终只有一个线程可以操作sb!!
查看完整描述

5 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

synchronized或者ReentrantLock,synchronized前面有人给例子了,我这里给个ReentrantLock的例子:


ReentrantLock lock = new ReentrantLock(); 

lock.lock();  

try {  

    // 这里是对sb的操作  

} finally {  

    lock.unlock();  


查看完整回答
反对 回复 2019-04-24
?
哔哔one

TA贡献1854条经验 获得超8个赞

这时候可以考虑直接使用StringBuffer,与StringBuilder唯一的不同就是前者是线程安全的。


查看完整回答
反对 回复 2019-04-24
?
GCT1015

TA贡献1827条经验 获得超4个赞

我个人觉得你应该把需要线程执行的方法先提出来,然后在该方法上加上锁,然后让多个线程去掉用应该可以实现


查看完整回答
反对 回复 2019-04-24
  • 5 回答
  • 0 关注
  • 389 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号