Use interrupt () to break the thread
When one thread is running, another thread can call the interrupt () method of the corresponding thread object to break it, and the method simply sets a flag in the target thread that indicates that it has been interrupted and returns immediately.
Packagecom.csdhsm.concurrent;ImportJava.util.concurrent.TimeUnit;/*** @Title: Interruptdemo.java * @Package: Com.csdhsm.concurrent * @Description Interrupt Demo *@authorHan * @date 2016-4-18 pm 6:55:00 *@versionV1.0*/ Public classInterruptdemoImplementsRunnable {@Override Public voidrun () {System.out.println ("The thread is runing."); System.out.println ("The thread is sleeping."); Try { //Child thread sleeps for 20 seconds, waiting to be interruptedTimeUnit.SECONDS.sleep (20); System.out.println ("The Thread is Wake"); } Catch(interruptedexception e) {System.out.println ("The thread is interrupted"); } //It's going to go on here .SYSTEM.OUT.PRINTLN ("The Thread is Terminal"); } Public Static voidMain (string[] args)throwsinterruptedexception {Thread T=NewThread (NewInterruptdemo ()); T.start (); System.out.println (The Main is sleeping to wait the thread start! "); //The main thread sleeps for 2 seconds, waiting for the child thread to runTimeUnit.SECONDS.sleep (2); System.out.println ("The thread would be interrupted"); T.interrupt (); }}
Results
In particular, note the red Place: if you simply call the interrupt () method, the thread is not actually interrupted and will continue to execute.
Use the isinterrupted () method to determine the interrupt state
You can call the Isinterrupted () method on the thread object to check the interrupt state of any thread. Note here: Once the thread is interrupted, the isinterrupted () method returns True, and once the sleep () method throws an exception, it empties the interrupt flag, and the Isinterrupted () method returns FALSE.
Packagecom.csdhsm.concurrent;ImportJava.util.concurrent.TimeUnit;/*** @Title: Interruptedcheck.java * @Package: Com.csdhsm.concurrent * @Description interrupted Test *@authorHan * @date 2016-4-18 pm 7:44:12 *@versionV1.0*/ Public classInterruptedcheck { Public Static voidMain (string[] args) {Thread T=Thread.CurrentThread (); System.out.println ("Current Thread ' s Statusa" +t.isinterrupted ()); //you interrupt yourself ~T.interrupt (); System.out.println ("Current Thread ' s STATUSC" +t.isinterrupted ()); System.out.println ("Current Thread ' s Statusb" +t.isinterrupted ()); Try{TimeUnit.MILLISECONDS.sleep (100); } Catch(interruptedexception e) {System.out.println ("Current Thread ' s STATUSD" +t.isinterrupted ()); } System.out.println ("Current Thread ' s Statuse" +t.isinterrupted ()); }}
Results
Use the interrupted () method to determine the interrupt state
You can use the thread.interrupted () method to check the interrupt state of the current thread (and implicitly reset to false). This method returns true because it is a static method and therefore cannot be used on a particular thread, only the interrupt state of the thread that called it is reported, and if the thread is interrupted and the interrupt state is unclear. Unlike isinterrupted (), it automatically resets the interrupt state to false, the second call to the Thread.interrupted () method, and always returns false unless the thread is interrupted.
Packagecom.csdhsm.concurrent;/*** @Title: Interruptedcheck.java * @Package: Com.csdhsm.concurrent * @Description interrupted Test *@authorHan * @date 2016-4-18 pm 7:44:12 *@versionV1.0*/ Public classInterruptedcheck { Public Static voidMain (string[] args) {Thread T=Thread.CurrentThread (); System.out.println ("Current Thread ' s Statusa" +t.interrupted ()); //you interrupt yourself ~T.interrupt (); System.out.println ("Current Thread ' s STATUSC" +t.interrupted ()); System.out.println ("Current Thread ' s Statusb" +t.interrupted ()); System.out.println ("Current Thread ' s STATUSD" +t.interrupted ()); }}
Results
Watch the red mark.
Java concurrent Programming (ii) Interrupt for thread task (interrupt)