Java_23_并发包
发布人:shili8
发布时间:2025-03-08 18:25
阅读次数:0
**Java23 并发包**
Java23 并发包是 Java 平台的一部分,提供了用于构建高性能、可伸缩的多线程应用程序的工具和类。该包包含了一系列的类和接口,帮助开发者管理并发性、线程安全性以及资源共享。
**1. 线程**
Java23 并发包中的 `Thread` 类是 Java 平台中所有线程的基类。每个线程都有自己的执行栈和程序计数器。
javapublic class MyThread extends Thread {
@Override public void run() {
System.out.println("Hello, world!");
}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); // 启动线程 }
}
**2. 线程池**
Java23 并发包中的 `ThreadPoolExecutor` 类是线程池的实现类。线程池可以重用已经创建的线程,避免每次请求都创建一个新的线程。
javaimport java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MyThreadPool {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池 for (int i =0; i < 10; i++) {
final int num = i;
executor.submit(() -> System.out.println("Task " + num));
}
executor.shutdown(); // 关闭线程池 }
}
**3. 锁**
Java23 并发包中的 `Lock` 接口是用于实现锁的抽象类。锁可以用来保护共享资源,防止多个线程同时访问。
javaimport java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MyLock {
private final Lock lock = new ReentrantLock();
public void doSomething() {
lock.lock(); // 加锁 try {
System.out.println("Doing something...");
} finally {
lock.unlock(); // 解锁 }
}
public static void main(String[] args) {
MyLock lock = new MyLock();
lock.doSomething();
}
}
**4.读写锁**
Java23 并发包中的 `ReentrantReadWriteLock` 类是用于实现读写锁的抽象类。读写锁可以用来保护共享资源,允许多个线程同时读取,而只允许一个线程写入。
javaimport java.util.concurrent.locks.ReentrantReadWriteLock;
public class MyReadWriteLock {
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public void read() {
lock.readLock().lock(); // 加读锁 try {
System.out.println("Reading...");
} finally {
lock.readLock().unlock(); // 解读锁 }
}
public void write() {
lock.writeLock().lock(); // 加写锁 try {
System.out.println("Writing...");
} finally {
lock.writeLock().unlock(); // 解写锁 }
}
public static void main(String[] args) {
MyReadWriteLock lock = new MyReadWriteLock();
lock.read();
lock.write();
}
}
**5. 队列**
Java23 并发包中的 `BlockingQueue` 接口是用于实现队列的抽象类。队列可以用来存储和取出元素。
javaimport java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class MyQueue {
private final BlockingQueue queue = new LinkedBlockingQueue<>();
public void put(String element) throws InterruptedException {
queue.put(element); // 放入队列 System.out.println("Added " + element);
}
public String take() throws InterruptedException {
return queue.take(); // 取出队列 }
public static void main(String[] args) {
MyQueue queue = new MyQueue();
try {
queue.put("Hello");
queue.put("World");
System.out.println(queue.take());
System.out.println(queue.take());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
**6. 并发集合**
Java23 并发包中的 `ConcurrentHashMap` 类是用于实现并发哈希表的抽象类。并发哈希表可以用来存储和取出元素。
javaimport java.util.concurrent.ConcurrentHashMap;
public class MyConcurrentMap {
private final ConcurrentHashMap map = new ConcurrentHashMap<>();
public void put(String key, String value) {
map.put(key, value); // 放入并发哈希表 System.out.println("Added " + key + "=" + value);
}
public String get(String key) {
return map.get(key); // 取出并发哈希表 }
public static void main(String[] args) {
MyConcurrentMap map = new MyConcurrentMap();
map.put("Hello", "World");
System.out.println(map.get("Hello"));
}
}
**7. 并发计数器**
Java23 并发包中的 `AtomicInteger` 类是用于实现并发计数器的抽象类。并发计数器可以用来存储和取出整数值。
javaimport java.util.concurrent.atomic.AtomicInteger;
public class MyConcurrentCounter {
private final AtomicInteger counter = new AtomicInteger(0);
public void increment() {
counter.incrementAndGet(); // 增加计数 System.out.println("Current count: " + counter.get());
}
public static void main(String[] args) {
MyConcurrentCounter counter = new MyConcurrentCounter();
for (int i =0; i < 10; i++) {
counter.increment();
}
}
}
**8. 并发计时器**
Java23 并发包中的 `ScheduledExecutorService` 接口是用于实现并发计时器的抽象类。并发计时器可以用来执行定时任务。
javaimport java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class MyConcurrentTimer {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); // 创建一个固定大小的线程池 executor.scheduleAtFixedRate(() -> System.out.println("Tick"),0,1, TimeUnit.SECONDS); // 每秒执行一次 }
}
**9. 并发信号**
Java23 并发包中的 `CyclicBarrier` 类是用于实现并发信号的抽象类。并发信号可以用来同步线程。
javaimport java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class MyConcurrentSignal {
private final CyclicBarrier barrier = new CyclicBarrier(3); // 创建一个三元组 public void await() throws InterruptedException, BrokenBarrierException {
barrier.await(); // 等待信号 }
public static void main(String[] args) {
MyConcurrentSignal signal = new MyConcurrentSignal();
try {
signal.await();
System.out.println("All threads have arrived.");
} catch (InterruptedException | BrokenBarrierException e) {
Thread.currentThread().interrupt();
}
}
}
**10. 并发信号量**
Java23 并发包中的 `Semaphore` 类是用于实现并发信号量的抽象类。并发信号量可以用来控制线程数量。
javaimport java.util.concurrent.Semaphore;
public class MyConcurrentSemaphore {
private final Semaphore semaphore = new Semaphore(3); // 创建一个三元组 public void acquire() throws InterruptedException {
semaphore.acquire(); // 获取信号量 }
public void release() {
semaphore.release(); //释放信号量 }
public static void main(String[] args) {
MyConcurrentSemaphore semaphore = new MyConcurrentSemaphore();
try {
semaphore.acquire();
System.out.println("Thread has acquired the semaphore.");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
以上是 Java23 并发包的主要类和接口。这些类和接口可以用来构建高性能、可伸缩的多线程应用程序。

