交替打印1a2v3c4d…
-
synchronized
-
LockSupport
-
ReenrantLock
-
CountDownLatch || 自旋
-
CAS
占用CUP
-
BlockQueue
- 使用put和tack方法,放满了阻塞,取完了阻塞
-
Exchange
输出谁先执行不一定!!!
-
transferQueue
把自己的交给对方打印
ThreadPool 线程池
- 三大类
Executor:定义了线程的执行接口;
ExecutorService:继承Executor类,并且完善了整个线程池的生命周期;
ThreadPoolExecutor:
Callable
- 类似于rennable,但是有返回值
Future
- 存储将来将要产生的结果
Callable<String> c = new Callable<String>() {
@Override
public String call() throws Exception {
return "Hello Callable";
}
};
ExecutorService service = Executors.newCachedThreadPool();
Future<String> future = service.submit(c);//异步提交
System.out.println(future.get());//阻塞方法,获得返回值
service.shutdown();
FutureTask
- Future + Runnable;
FutureTask<String> futureTask = new FutureTask<>(() -> {
return "Hello Callable Lambda!";
});
new Thread(futureTask).start(); //Future与Runnable的结合;
System.out.println(futureTask.get());
CompletableFuture
- 管理多个Future的结果
public class CompletableFutureTest {
public static void main(String[] args) {
Long start =System.currentTimeMillis();
CompletableFuture<Double> completableFuture = CompletableFuture.supplyAsync(new Supplier<Double>() {
@Override
public Double get() {
return null;
}
});
CompletableFuture TM = CompletableFuture.supplyAsync(()->getTM());
CompletableFuture TB = CompletableFuture.supplyAsync(()->getTB());
CompletableFuture JD = CompletableFuture.supplyAsync(()->getJD());
CompletableFuture.allOf(TM,TB,JD).join();
Long end =System.currentTimeMillis();
System.out.println(end-start);
}
static Double getTM(){
return 1.00;
}
static Double getTB(){
return 2.00;
}
static Double getJD(){
return 3.00;
}
}
public class CompletableFuture_02 {
public static void main(String[] args) {
CompletableFuture.supplyAsync(()->getTM())
.thenAccept(String::valueOf)
.thenAccept(str -> "price : "+str)
.thenAccept(System.out::println);
}
static Double getTM(){
return 1.00;
}
static Double getTB(){
return 2.00;
}
static Double getJD(){
return 3.00;
}
}