java - wait(),notify(),notifyAll() T2 start! T2 end! T1 start! 为什么会阻塞
PHP中文网
PHP中文网 2017-04-18 10:53:24
0
2
918
public class Thread04 {
   final Object object = new Object();
Runnable rb4 = new Runnable() {
    public void run(){
        synchronized (object){

                System.out.println("T1 start!");
                try {
                    object.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                object.notify();
                System.out.println("T1 end!");
            }
        }
};
Runnable rb5 = new Runnable() {
    public void run(){
        synchronized (object){
            System.out.println("T2 start!");
            object.notify();
            System.out.println("T2 end!");
            }
        }
};
public static void main(String[] args) {
        Thread04 th = new Thread04();
        new Thread(th.rb4).start();
        new Thread(th.rb5).start();
     }
 }
PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(2)
洪涛

objek.notify(); rb5 dipanggil apabila rb4 belum memasuki keadaan menunggu kerana masih menunggu kunci. Permulaan utas tidak bermakna ia akan berjalan() dengan sendirinya serta-merta, yang bermaksud bahawa run() utas yang bermula() selepas ia berkemungkinan akan dilaksanakan terlebih dahulu.

迷茫

rb4 mendapatkan kunci objek object semasa operasi, mengeluarkan T1 start!, dan kemudian memanggil wait() Kaedah ini akan menyebabkan rb4 tergantung, melepaskan kunci dan menyekat pada masa yang sama. Pada masa ini rb5 memperoleh kunci dan mengeluarkan T2 start!. Kemudian panggil object.notify(); Walaupun rb4 bertujuan untuk dijalankan, kunci rb5 belum dilepaskan, jadi rb4 masih disekat. rb5Teruskan berjalan dan keluarkan T2 end!. rb5Operasi selesai, kunci dilepaskan, rb4Operasi keluaranT1 end!.

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!