Rumah  >  Soal Jawab  >  teks badan

多线程 - 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 hari yang lalu450

membalas semua(5)saya akan balas

  • 阿神

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

    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()){
            
            }
            
            .......
        }
    }

    balas
    0
  • PHP中文网

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

    Cuba synchronized, ia datang dalam beberapa butiran.
    Ia boleh ditambahkan pada blok kod seperti @scort, atau ia boleh ditambahkan pada objek.

    balas
    0
  • PHPz

    PHPz2017-04-18 09:52:26

    synchronized atau ReentrantLock Seseorang memberi contoh synchronized sebelum ini saya akan berikan contoh ReentrantLock di sini:

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

    balas
    0
  • PHP中文网

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

    Pada masa ini, anda boleh mempertimbangkan untuk menggunakan StringBuffer secara langsung Satu-satunya perbezaan daripada StringBuilder ialah yang pertama adalah selamat untuk benang.

    balas
    0
  • 大家讲道理

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

    Saya secara peribadi berpendapat anda harus mengemukakan kaedah yang memerlukan pelaksanaan utas dahulu, kemudian tambahkan kunci pada kaedah itu, dan kemudian alih keluar berbilang utas dan ia sepatutnya boleh dilakukan

    balas
    0
  • Batalbalas