Interrupt method
Interrupt is literally meant to be interrupted, but in Java the Thread.Interrupt () method actually notifies the thread in some way and does not abort the thread directly. What you do is determined by the person who writes the code, and usually we abort the thread.
If the thread is calling a wait (), a wait (long), or a wait (long int) method of the object class, or a join (), join (long), join (long, int), sleep (long), or sleep (long , int) method is blocked, its break state will be cleared and it will receive a interruptedexception.
If the thread is blocked in an I/O operation on an interruptible channel (Java.nio.channels.InterruptibleChannel), the channel is closed, the interrupt state of the thread is set, and the thread receives a Closedbyinterruptexception.
If the thread is blocked in a Selector (Java.nio.channels.Selector), the interrupt state of the thread is set, and it will immediately return from the select operation and may have a value of not 0 as if the wakeup method of the selector was invoked.
If none of the previous conditions were saved, the interrupt state of the thread is set.
Interrupting a thread that is not active does not require any action.
Detect interrupts
How to detect interrupts depends on what the thread does.
If the thread calls a method that can throw a interruptexception, the interruptexception is captured and processed in a catch block (usually by exiting the Run method to medium thread)
If other methods are invoked, the thread.interrupted can be checked at idle time to determine whether the interrupt signal has been received and processed after the interrupt signal is received. You can throw a interruptexception so that it's consistent with the previous approach
Break status
The thread's interrupt mechanism is implemented using the internal flag of the interrupt state. The interrupt state is set when the interrupt () method of the thread is invoked (refer to the Interrupt method description above).
There are two ways to get the interrupt state of a thread:
Calls the static method Thread.interrupted (), which clears the interrupt state of the current thread in addition to returning the interrupt state of the current thread. In other words, if the method is called twice in a row, the second call returns FALSE, except if the first call has cleared its break state, and the second call is interrupted before the interrupt state is checked out.
Invokes the isinterrupted () method of the specified thread, which returns only the interrupt state of the specified thread without affecting the interrupt state of the thread.
There are two ways to clear the interrupt state of a thread:
calls thread.interrupted ()
calls the thread's interrupt () as described above. Method throws a interruptedexception, it clears the interrupt state of the thread at the same time, including the object class Wait (), the Wait (long), or the wait (long, int) method, or the thread's join (), join ( Long), join (long, int), sleep (long), or sleep (long, int) methods