首页 > java 线程同步问题

java 线程同步问题

如下两个线程类:

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!!


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


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


试试synchronized,它有好几种颗粒度。
像@scort 一样加在代码块上也可以,加在对象上也可以。


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

ReentrantLock lock = new ReentrantLock(); 
lock.lock();  
try {  
    // 这里是对sb的操作  
} finally {  
    lock.unlock();  
} 

public class A implements Runnable{
    private StringBuilder sb;
    
    @Override
    public void run() {
        //操作sb缓冲
        
        synchronized(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()缓冲
        synchronized(a.getsb()){
        
        }
        
        .......
    }
}
【热门文章】
【热门文章】