最近,小编发现了一篇关于Java实现并发的方法总结的文章,来和大家分享一下。下面是详细内容,有兴趣的小伙伴们可以阅读一下。
Java实现并发的几种方法
Java程序默认以单线程方式运行。
synchronized
Java 用过synchronized 关键字来保证一次只有一个线程在执行代码块。
public synchronized void code() {
// TODO
}
Volatile
Volatile 关键字保证任何线程在读取Volatile修饰的变量的时候,读取的都是这个变量的最新数据。
Threads 和 Runnable
public class MyRunnable implements Runnable {
@Override
public void run() {
// TODO
}
}
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Runnable task = new MyRunnable();
Thread worker = new Thread(task);
worker.setName('Myrunnable');
worker.start();
}
创建thread会有很多overhead,性能低且不易管理
Thread pools
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
private static final int NUMOFTHREDS = 5;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(NUMOFTHREDS);
for (int i = 0; i < 50; i++) {
Runnable worker = new MyRunnable(i);
executor.execute(worker);
}
// executor不接受新的threads
executor.shutdown();
// 等待所有threads结束
executor.awaitTermination();
System.out.println("Finished all threads");
}
}
Futures 和 Callables
因为Runnable对象无法向调用者返回结果,我们可以用Callable类来返回结果。
package de.vogella.concurrency.callab