引言
Java 并发编程是 Java 语言的一个重要特性,它允许程序员创建能够同时执行多个任务的应用程序。在多核处理器和分布式系统日益普及的今天,掌握 Java 并发编程的核心框架和高效之道变得尤为重要。本文将深入探讨 Java 并发编程的核心框架,包括线程、锁、并发集合、原子变量以及并发工具类等,帮助读者构建高效、可靠的并发应用程序。
线程
线程是并发编程的基础,Java 提供了 Thread 类来创建和管理线程。以下是一些关于线程的关键点:
创建线程
public class MyThread extends Thread {
@Override
public void run() {
// 线程执行的代码
}
}
public class Main {
public static void main(String[] args) {
Thread thread = new MyThread();
thread.start();
}
}
线程状态
Java 线程有几种状态,包括新建(NEW)、就绪(RUNNABLE)、运行(RUNNING)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)。
线程同步
为了防止多个线程同时访问共享资源导致数据不一致,Java 提供了同步机制。以下是一些同步方法:
public synchronized void synchronizedMethod() {
// 同步代码块
}
public void synchronizedBlock() {
synchronized (this) {
// 同步代码块
}
}
锁
锁是控制线程访问共享资源的机制。Java 提供了几种锁的实现,包括:
synchronized 关键字
synchronized 关键字可以用来同步方法或代码块。
public synchronized void synchronizedMethod() {
// 同步方法
}
ReentrantLock
ReentrantLock 是 Java 5 引入的一个可重入的互斥锁。
import java.util.concurrent.locks.ReentrantLock;
public class Main {
private final ReentrantLock lock = new ReentrantLock();
public void lockedMethod() {
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock();
}
}
}
并发集合
Java 并发集合框架提供了一系列线程安全的集合类,包括:
ConcurrentHashMap
ConcurrentHashMap 是一个线程安全的哈希表。
import java.util.concurrent.ConcurrentHashMap;
public class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
map.put("key", "value");
String value = map.get("key");
System.out.println(value);
}
}
CopyOnWriteArrayList
CopyOnWriteArrayList 是一个线程安全的列表,适用于读多写少的场景。
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("element");
String element = list.get(0);
System.out.println(element);
}
}
原子变量
原子变量是线程安全的变量,Java 提供了 AtomicInteger、AtomicLong 和 AtomicReference 等原子变量类。
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(0);
atomicInteger.incrementAndGet();
int value = atomicInteger.get();
System.out.println(value);
}
}
并发工具类
Java 提供了一系列并发工具类,包括:
CountDownLatch
CountDownLatch 允许一个或多个线程等待其他线程完成操作。
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
new Thread(() -> {
System.out.println("Thread " + Thread.currentThread().getId() + " started.");
latch.countDown();
}).start();
}
latch.await();
System.out.println("All threads completed.");
}
}
CyclicBarrier
CyclicBarrier 允许多个线程等待彼此到达某个点。
import java.util.concurrent.CyclicBarrier;
public class Main {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3, () -> {
System.out.println("Barrier reached.");
});
for (int i = 0; i < 3; i++) {
new Thread(() -> {
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
}
}
}
总结
Java 并发编程的核心框架和高效之道涉及多个方面,包括线程、锁、并发集合、原子变量以及并发工具类等。通过掌握这些核心框架,程序员可以构建高效、可靠的并发应用程序。本文介绍了 Java 并发编程的一些关键概念和实现方式,希望对读者有所帮助。
