Come to Java multi-thread design mode
Two-phase termination, job in progress -- termination in progress -- end
Don't put aside half of the tasks to be processed, so we can end it in a hurry and wait for it to be processed.
Public class main { Public static void main (string [] ARGs) {system. out. println (" main: Begin "); try {countupthread T = New countupthread (); T. start (); thread. sleep (1, 10000); system. out. println (" main: shutdownrequest "); T. shutdownrequest (); system. out. println (" main: Join "); T. join (); }< span style = "color: # 0000ff"> catch (interruptedexception e) {e. printstacktrace ();} system. out. println (" main: End ") ;}
Package Sample; Public Class Countupthread Extends Thread { // Counter value Private Long Counter = 0; // True if a termination request has been sent Private Volatile Boolean Shutdownrequested = False ; // Terminate the request Public VoidShutdownrequest () {shutdownrequested =True; Interrupt ();} // Determine whether the final request has been sent Public Boolean Isshutdownrequested (){ Return Shutdownrequested ;} // Action Public Final Void Run (){ Try{While(! Shutdownrequested) {dowork ();}}Catch(Interruptedexception e ){}Finally{Doshutdown ();} } // Job Private Void Dowork () Throws Interruptedexception {counter ++; system. Out. println (" Dowork: Counter = & Quot; + counter); thread. Sleep (500 );} // Terminate the Processing Private VoidDoshutdown () {system. Out. println ("Doshutdown: Counter ="+ Counter );} }