Heim  >  Artikel  >  Java  >  Was ist der Unterschied zwischen Java-Thread-Unterbrechung und -Blockierung? Vergleich von Java-Thread-Unterbrechung und -Blockierung

Was ist der Unterschied zwischen Java-Thread-Unterbrechung und -Blockierung? Vergleich von Java-Thread-Unterbrechung und -Blockierung

不言
不言Original
2018-09-15 16:51:062653Durchsuche

In diesem Artikel erfahren Sie, was der Unterschied zwischen Java-Thread-Unterbrechung und -Blockierung ist. Der Vergleich zwischen Java-Thread-Unterbrechung und -Blockierung hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen.

Viele Java-Entwickler (einschließlich mir), insbesondere diejenigen, die gerade erst in die Softwarebranche eingestiegen sind, denken, dass das Setzen eines Thread-Interrupts in Java bedeutet, dass der Thread angehalten wurde und nicht vorwärts ausgeführt werden kann,

Thread.currentThread().interrupt()

Eigentlich ist dies nicht der Fall. True bedeutet, dass er unterbrochen wurde >

//Den Thread-Unterbrechungsstatus abrufen, wenn bei Unterbrechung true zurückgegeben wird, andernfalls false zurückgegeben wird

Thread.currentThread().isInterrupted()
Das Festlegen der Thread-Unterbrechung hat keinen Einfluss auf die weitere Ausführung des Threads. Nachdem der Thread jedoch den Interrupt festgelegt hat, werden die Methoden „wait“, „jion“ und „sleep“ im Thread aufgerufen. Eine Methode, die sofort eine InterruptedException auslöst, und das Interrupt-Flag wird gelöscht und auf „false“ zurückgesetzt.

Klasse Thread2 implementiert Runnable{

    @Override
    public void run() {
        try {
            System.out.println();
            System.out.println(hread.currentThread().isInterrupted());//输出false
            Thread.currentThread().interrupt();//当前线程中断
            System.out.println("Thread.currentThread().isInterrupted());//输出true
            Thread.sleep(3000);//中断后执行sleep会抛出异常
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("Thread.currentThread().isInterrupted());//输出false
        }
       
    }
}
Wie man den Thread wirklich stoppt und nicht vorwärts ausführt:

Damit der Thread wirklich stoppt (blockiert), bietet Java eine Parallelität auf niedrigerer Ebene Werkzeugklasse: LockSupport, es gibt zwei häufig verwendete Methoden in dieser Klasse: 1

park(Objektblocker) bedeutet, den angegebenen Thread zu blockieren, der Parameterblocker ist das aktuelle Thread-Objekt 2 unpark(Thread-Thread) weckt den angegebener Thread, der Parameter Thread gibt das Thread-Objekt an

Beispiel:

 public void test_LockSupport(){
      Thread thread=new Thread(new Thread_park());
      thread.start();//阻塞当前线程
      Thread thread2=new Thread(new Thread_unpark(thread));
      thread2.start();//唤醒被阻塞的线程
  }

  class Thread_park implements  Runnable{
    @Override
    public void run() {
        System.out.println("Thread_park开始");
        LockSupport.park(this);//阻塞当前线程
        System.out.println("Thread_park结束");
     }
  }

 class Thread_unpark implements  Runnable{
    private Thread thread;

    public Thread_unpark(Thread thread) {
        this.thread = thread;
    }

    @Override
    public void run() {
        System.out.println("Thread_unpark开始");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LockSupport.unpark(thread);//唤醒被阻塞的线程
        System.out.println("Thread_unpark结束");
    }
}
Verwandte Empfehlungen:

Detaillierte Erläuterung der Thread-Blockierungsverwendung der LockSupport-Klasse in der Java-Multithread-Programmierung

Beispielcode für Multi-Thread-Blockierung und Aufwecken in Java

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Java-Thread-Unterbrechung und -Blockierung? Vergleich von Java-Thread-Unterbrechung und -Blockierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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