首頁  >  問答  >  主體

多线程 - 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!!

PHP中文网PHP中文网2741 天前453

全部回覆(5)我來回復

  • 阿神

    阿神2017-04-18 09:52:26

    雷雷

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:52:26

    試試synchronized,它有好幾種顆粒度。
    像@scort 一樣加在程式碼區塊上也可以,加在物件上也可以。

    回覆
    0
  • PHPz

    PHPz2017-04-18 09:52:26

    synchronized或是ReentrantLock,synchronized前面有人給例子了,我這裡給個ReentrantLock的例子:

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:52:26

    這時候可以考慮直接使用StringBuffer,與StringBuilder唯一的不同就是前者是線程安全的。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:52:26

    我個人覺得你應該把需要執行緒執行的方法先提出來,然後在該方法上加上鎖,然後讓多個執行緒去掉用應該可以實作

    回覆
    0
  • 取消回覆