Rumah  >  Soal Jawab  >  teks badan

java - Soalan mengenai pemberitahuan berbilang benang

public class WaitTest {

    static class ThreadA extends Thread {
        public ThreadA(String name){
            super(name);
        }

        @Override
        public void run() {
           synchronized (this){
               System.out.println(Thread.currentThread().getName()+" call notify()");
               //notify();//notify之后 要等到这个代码块结束之后才会把锁让出去,当然如果在notify之后又有wait,那就会主动把锁让出去

               try {
                   System.out.println(Thread.currentThread().getName()+" wait");
                   //wait();

                   //Thread.sleep(10000);
               } catch (Exception e) {
                   e.printStackTrace();
               }
               System.out.println(Thread.currentThread().getName()+" after notify");
           }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        ThreadA t1 =new ThreadA("t1");

        synchronized (t1){
            System.out.println(Thread.currentThread().getName()+" start t1");
            t1.start();

            System.out.println(Thread.currentThread().getName()+" wait");
            t1.wait();//
                //System.out.println(Thread.currentThread().getName()+" notify");
               // t1.notify();
            System.out.println(t1.getName());
            System.out.println(Thread.currentThread().getName()+" continue");
            //t1.notify();
        }
    }
}

Secara logiknya, t1.wait() sepatutnya menyekat utas utama, dan tiada tempat lain untuk memberitahu
Dan selepas mengalih keluar t1.start(), ia akan disekat

Apakah maksudnya? Pengoptimuman pengkompil? Atau jika monitor tidak dikendalikan dalam blok kod disegerakkan, pemberitahuan aktif akan tamat? ?

给我你的怀抱给我你的怀抱2713 hari yang lalu574

membalas semua(1)saya akan balas

  • 仅有的幸福

    仅有的幸福2017-05-17 10:03:54

    Ini bukan pengoptimuman Sebenarnya, ia berkaitan dengan pelaksanaan utas. Dalam java doc, public final synchronized void join(long millis)Komen kaedah ini mempunyai ayat tertulis di atasnya

    <p> Pelaksanaan ini menggunakan gelung panggilan {@code this.wait} yang dikondisikan pada {@code this.isAlive}. mengesyorkan agar aplikasi tidak menggunakan {@code wait}, {@code notify} atau {@code notifyAll} pada kejadian {@code Thread}.

    Lihat muka tebal, sebenarnya notifyAll yang dipanggil selepas rangkaian tamat yang menyebabkan tunggu untuk bangun. Ia tidak disebabkan oleh sebarang pengoptimuman mesin maya. Semoga ia dapat menjawab kekeliruan anda

    balas
    0
  • Batalbalas