下面是JUC(Java.util.concurrent)并发包中一些常用类的用途和栗子,使用Markdown表格显示:
类名 | 用途和描述 | 栗子 |
---|---|---|
Executor | 提供一个执行任务的简单接口。 | java Executor executor = Executors.newFixedThreadPool(5); executor.execute(() -> System.out.println("Hello, Executor!")); |
ExecutorService | 继承自Executor接口,提供更丰富的任务执行功能。 | java ExecutorService executorService = Executors.newFixedThreadPool(5); Future<Integer> future = executorService.submit(() -> 42); |
Callable | 类似于Runnable,但是可以返回结果和抛出异常。 | java Callable<Integer> task = () -> { return 42; }; ExecutorService executorService = Executors.newFixedThreadPool(5); Future<Integer> future = executorService.submit(task); |
Future | 表示一个异步计算的结果。可以通过get()方法获取结果。 | java Future<Integer> future = executorService.submit(task); Integer result = future.get(); |
ReentrantLock | 可重入锁,用于替代synchronized关键字。 | java ReentrantLock lock = new ReentrantLock(); lock.lock(); try { // 被保护的代码 } finally { lock.unlock(); } |
ReadWriteLock | 读写锁,用于读写分离场景,多个线程可以同时读取。 | java ReadWriteLock rwLock = new ReentrantReadWriteLock(); rwLock.readLock().lock(); try { // 读取操作 } finally { rwLock.readLock().unlock(); } |
Semaphore | 信号量,用于控制同时访问某个资源的线程数量。 | java Semaphore semaphore = new Semaphore(3); semaphore.acquire(); try { // 使用资源 } finally { semaphore.release(); } |
CountDownLatch | 倒计时计数器,等待其他线程执行完毕后再执行。 | java CountDownLatch latch = new CountDownLatch(3); latch.await(); // 等待三个线程执行完毕后再继续执行 |
CyclicBarrier | 循环屏障,多个线程互相等待,达到预设的屏障后再一起继续。 | java CyclicBarrier barrier = new CyclicBarrier(3); barrier.await(); // 等待三个线程都到达屏障后再继续执行 |
BlockingQueue | 阻塞队列,线程安全的队列,支持阻塞操作。 | java BlockingQueue<String> queue = new LinkedBlockingQueue<>(); queue.put("Hello"); String item = queue.take(); |
注意:以上栗子仅用于演示使用,并未涵盖完整的实现细节。在实际使用中,需要根据具体的情况进行适当的异常处理和资源释放。
以上总结via chatgpt