多线程 - java 线程同步问题
PHP中文网
PHP中文网 2017-04-18 09:50:26
0
5
443

如下两个线程类:

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中文网

认证高级PHP讲师

membalas semua(5)
阿神
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()){
        
        }
        
        .......
    }
}
Ty80

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

PHPzhong

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();  
} 
Ty80

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

大家讲道理

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!