線程想用的舒服,自己去判斷結束太麻煩了。使用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());
}
}