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