线程想用的舒服,自己去判断结束太麻烦了。使用jdk的自带了类很好用
package com.github.pig.auth; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService service = Executors.newFixedThreadPool(5); // for(int i = 0;i < 5;i++){ // service.execute(()->{ // try { // TimeUnit.SECONDS.sleep(5); // } catch (InterruptedException e) { // e.printStackTrace(); // } // System.out.println(Thread.currentThread().getName()); // }); // } // service.shutdown(); // // System.out.println(service.isShutdown()); // System.out.println(service.isTerminated()); // try { // TimeUnit.SECONDS.sleep(6); // } catch (InterruptedException e) { // e.printStackTrace(); // } // System.out.println(service.isTerminated()); Future<Integer> task = service.submit(()->{ TimeUnit.MILLISECONDS.sleep(500); return 44; }); System.out.println("sdf"); System.out.println(task.isDone()); System.out.println(task.isCancelled()); TimeUnit.MILLISECONDS.sleep(1000); System.out.println(task.isDone()); System.out.println(task.isCancelled()); System.out.println(task.get()); // FutureTask<Integer> task = new FutureTask<>(()->{ // TimeUnit.MICROSECONDS.sleep(500); // return 1000; // }); // Thread th = new Thread(task); // th.start(); // System.out.println(task.get()); } }