>  Q&A  >  본문

多线程 - 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일 전452

모든 응답(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. 이전에 누군가가 동기화의 예를 들었습니다. 여기에서 ReentrantLock의 예를 들겠습니다.

    으아악

    회신하다
    0
  • PHP中文网

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

    이때 StringBuffer를 직접 사용하는 것을 고려할 수 있습니다. StringBuilder와의 유일한 차이점은 전자가 스레드로부터 안전하다는 것입니다.

    회신하다
    0
  • 大家讲道理

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

    개인적으로는 스레드 실행이 필요한 메서드를 먼저 제시하고 그 메서드에 잠금을 추가한 다음 여러 스레드를 제거해야 한다고 생각합니다

    회신하다
    0
  • 취소회신하다