Java实现并发的几种方法
Java程序默认以单线程方式运行。
synchronized
Java 用过synchronized 关键字来保证一次只有一个线程在执行代码块。
1 | public synchronized void code() { |
Volatile
Volatile 关键字保证任何线程在读取Volatile修饰的变量的时候,读取的都是这个变量的最新数据。
Threads 和 Runnable
1 | public class MyRunnable implements Runnable { |
1 | import java.util.ArrayList; |
创建thread会有很多overhead,性能低且不易管理
Thread pools
1 | import java.util.concurrent.ExecutorService; |
Futures 和 Callables
因为Runnable对象无法向调用者返回结果,我们可以用Callable类来返回结果。
1 | package de.vogella.concurrency.callables; |
1 |
|
CompletableFuture
CompletableFuture 在Future的基础上增加了异步调用的功能。callback()函数Thread执行结束的时候会自动调用。
CompletableFuture既支持阻塞,也支持非阻塞的callback()
1 | import java.util.concurrent.CompletableFuture; |