PackageCom.demo.test3;ImportJava.util.concurrent.CountDownLatch;/** * @authorqq:1236897 **///Latching//Nthread-Number of threads//Startgate-Make sure all threads are ready-"countdown-> all threads work//Endgate-The Timetask method is not returned until all threads have finished working Public classCountdownlocktest {/** * @paramargs*/ Public Static voidMain (string[] args) {//TODO auto-generated Method StubCaller Caller =NewCaller (); MyTask Task=NewMyTask (); Try{System.out.println (Caller.timetask (5, Task)); } Catch(interruptedexception e) {//TODO auto-generated Catch blockE.printstacktrace (); } }}classCaller { Public LongTimetask (intNthreads,FinalRunnable Task)throwsinterruptedexception {FinalCountdownlatch startgate =NewCountdownlatch (1); FinalCountdownlatch endgate =NewCountdownlatch (nthreads); for(inti = 0; i < nthreads; i++) {Thread T=NewThread () { Public voidrun () {Try{System.out.println ("Startgate await"); Startgate.await (); Try{task.run (); } finally{endgate.countdown (); } } Catch(Interruptedexception e) {}}; T.start (); } LongStart =System.nanotime (); System.out.println ("Startgate Countdown"); Startgate.countdown (); Endgate.await (); LongEnd =System.nanotime (); System.out.println ("Return"); returnEnd-start; }}classMyTaskImplementsRunnable {/** (Non-javadoc) * * @see Java.lang.runnable#run ()*/@Override Public voidrun () {//TODO auto-generated Method StubSYSTEM.OUT.PRINTLN ("ID sleep:-" +Thread.CurrentThread (). GetId ()); Try{Thread.Sleep (5000); System.out.println ("Sleep Done:-" +Thread.CurrentThread (). GetId ()); } Catch(interruptedexception e) {//TODO auto-generated Catch blockThread.CurrentThread (). interrupt (); } }}
Java_ Thread-Lock