Rumah  >  Soal Jawab  >  teks badan

java - wait(),notify(),notifyAll() T2 start! T2 end! T1 start! 为什么会阻塞

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中文网2765 hari yang lalu923

membalas semua(2)saya akan balas

  • PHP中文网

    PHP中文网2017-04-18 10:55:24

    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.

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:55:24

    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!.

    balas
    0
  • Batalbalas