Heim > Java > javaLernprogramm > Einführung in das Warten und Aufwecken von Threads in Java (Code)

Einführung in das Warten und Aufwecken von Threads in Java (Code)

不言
Freigeben: 2018-10-08 15:48:36
nach vorne
2974 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung (Code) zum Warten und Aufwecken von Threads in Java. Ich hoffe, dass er für Freunde hilfreich ist.

class ThreadA extends Thread{

    public ThreadA(String name) {
        super(name);
    }

    public void run() {
        synchronized (this) {
            System.out.println(Thread.currentThread().getName()+" call notify()");
            notify();
        }
    }
}
public class WaitTest {
    public static void main(String[] args) {
        ThreadA t1 = new ThreadA("t1");
        synchronized(t1) {
            try {
                // 启动“线程t1”
                System.out.println(Thread.currentThread().getName()+" start t1");
                t1.start();

                // 主线程等待t1通过notify()唤醒。
                System.out.println(Thread.currentThread().getName()+" wait()");
                t1.wait();

                System.out.println(Thread.currentThread().getName()+" continue");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
Nach dem Login kopieren

Ausgabeergebnis: main start t1 -> main wait() -> main continue

Tatsächlich befindet sich t1 beim Aufruf von t1.start() im Bereitschaftszustand, aber in der Hauptmethode ist t1 vom Hauptthread gesperrt. Wenn t1.wait() den aktuellen Thread warten lässt, wird er tatsächlich zum Hauptthread Nach dem Sperren von t1 wird der t1-Thread ausgeführt, der t1-Aufruf notify() ausgegeben, dann der Hauptthread aktiviert und schließlich beendet Gemeinsam ist ihnen, dass sie den Thread in den Ruhezustand versetzen, aber wait() wird die Objektsynchronisationssperre aufheben, aber der folgende Code wird erst dann ausgeführt, wenn t1 endet.

public class SleepLockTest{ 
    private static Object obj = new Object();
    public static void main(String[] args){ 
        ThreadA t1 = new ThreadA("t1"); 
        ThreadA t2 = new ThreadA("t2"); 
        t1.start(); 
        t2.start();
    } 
    static class ThreadA extends Thread{
        public ThreadA(String name){ 
            super(name); 
        } 
        public void run(){ 
            synchronized (obj) {
                try {
                    for(int i=0; i <10; i++){ 
                        System.out.printf("%s: %d\n", this.getName(), i); 
                        // i能被4整除时,休眠100毫秒
                        if (i%4 == 0)
                            Thread.sleep(100);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        } 
    } 
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinführung in das Warten und Aufwecken von Threads in Java (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage