ホームページ  >  に質問  >  本文

多线程 - 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日前456

全員に返信(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 の例を示します。 リーリー

    返事
    0
  • PHP中文网

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

    現時点では、StringBuffer を直接使用することを検討できます。StringBuilder との唯一の違いは、前者がスレッドセーフであることです。

    返事
    0
  • 大家讲道理

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

    個人的には、最初にスレッドの実行を必要とするメソッドを提案し、次にそのメソッドにロックを追加し、それから複数のスレッドを削除すれば可能になるはずだと思います

    返事
    0
  • キャンセル返事