Java 并发编程
// 方式一:继承 ThreadThread t = new Thread(() -> System.out.println("Hello from thread"));t.start();
// 方式二:ExecutorServiceExecutorService executor = Executors.newFixedThreadPool(4);executor.submit(() -> System.out.println("Task 1"));executor.submit(() -> System.out.println("Task 2"));executor.shutdown();synchronized 与锁
Section titled “synchronized 与锁”// 同步方法public synchronized void increment() { count++;}
// 同步代码块synchronized (lock) { // 临界区}
// ReentrantLock(更灵活)private final ReentrantLock lock = new ReentrantLock();
public void transfer() { lock.lock(); try { // 业务逻辑 } finally { lock.unlock(); }}| 集合 | 特点 |
|---|---|
ConcurrentHashMap | 高并发哈希表,分段锁 |
CopyOnWriteArrayList | 读无锁,写时复制 |
BlockingQueue | 生产者-消费者模式 |
ConcurrentLinkedQueue | 无锁并发队列 |
BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
// 生产者queue.put("item");
// 消费者String item = queue.take();CompletableFuture
Section titled “CompletableFuture”Java 8 引入的异步编程工具:
CompletableFuture<String> future = CompletableFuture .supplyAsync(() -> fetchData()) .thenApply(data -> processData(data)) .thenApply(result -> formatResult(result)) .exceptionally(ex -> "Error: " + ex.getMessage());
String result = future.get();虚拟线程(Java 21)
Section titled “虚拟线程(Java 21)”轻量级线程,百万级并发不再是梦想:
// 创建虚拟线程Thread.ofVirtual().start(() -> { System.out.println("Virtual thread: " + Thread.currentThread());});
// 虚拟线程 ExecutorServicetry (var executor = Executors.newVirtualThreadPerTaskExecutor()) { IntStream.range(0, 100_000).forEach(i -> { executor.submit(() -> { Thread.sleep(Duration.ofSeconds(1)); return i; }); });} // 10 万个任务,每个睡 1 秒,约 1 秒全部完成