Java并发库

:Java并发库:(重要)

Java1.5以后为了解决多线程并发,死锁等问题引入的工具包。java.util.concurrent。

包含:

ExecutorService:线程池,submit有返回值,而execute没有

1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。

2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。

线程池中有一个atomiticInteger的对象ctl,记录了"线程池中的任务数量"和"线程池状态"2个信息。线程池的5种状态是:Running(新建直接就是这个状态), SHUTDOWN(线程池处在SHUTDOWN状态时,不接收新任务,但能处理已添加的任务。调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN), STOP(线程池处在STOP状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务。调用线程池的shutdownNow()接口时), TIDYING(当所有的任务已终止,ctl记录的"任务数量"为0,线程池会变为TIDYING状态。当线程池变为TIDYING状态时,会执行钩子函数terminated()。), TERMINATED(线程池彻底终止,就变成TERMINATED状态。)。

 

Semaphore:通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。如9个人排队等见3个人。acquire,release

 

ReentrantLock:重入锁,condition.await(),condition.signal(),lock,unlock

Condition的基本使用如下:

*Condition是个接口,基本的方法就是await()和signal()方法;

*Condition依赖于Lock接口,生成一个Condition的基本代码是lock.newCondition()

* 调用Condition的await()和signal()方法,都必须在lock保护之内,就是说必须在lock.lock()和lock.unlock之间才可以

* 和Object.wait()方法一样,每次调用Condition的await()方法的时候,当前线程就自动释放了对当前锁的拥有权

http://outofmemory.cn/java/java.util.concurrent/lock-reentrantlock-condition

 

BlockingQueue:阻塞队列

ScheduledExecutorService:方法使用各种延迟创建任务,可安排在给定的延迟后运行或定期执行的命令。

池量重阻计。

### Java并发库的使用与功能介绍 Java并发库Java平台中用于支持多线程并发编程的重要工具集合。它提供了丰富的类和接口,帮助开发者高效地实现高并发程序。以下是对Java并发库主要功能和使用的详细介绍。 #### 1. 并发库的核心组件 Java并发库的主要组件包括原子类、线程池、同步工具以及异步编程支持等。这些组件在不同的场景下发挥着重要作用[^1]。 #### 2. 原子类 Java通过`java.util.concurrent.atomic`包提供了一系列原子类,如`AtomicInteger`和`AtomicLong`,它们能够确保对共享资源的操作具有原子性。然而,在高并发场景下,这些原子类可能会成为性能瓶颈。为了解决这一问题,Java 8引入了`LongAdder`类,它可以更高效地处理高并发计数场景[^2]。 #### 3. 线程池 线程池Java并发库中的重要组成部分,用于管理和复用线程资源。通过线程池,可以避免频繁创建和销毁线程带来的开销。例如,`Executors.newFixedThreadPool(4)`可以创建一个固定大小的线程池。此外,Java 8的`CompletableFuture`进一步增强了线程池的功能,允许开发者更灵活地定义异步任务链[^3]。 ```java ExecutorService pool = Executors.newFixedThreadPool(4); CompletableFuture.supplyAsync(() -> { // 异步任务1 return queryFromDatabase(); }, pool).thenApplyAsync(result -> { // 异步任务2 return processResult(result); }, pool).exceptionally(ex -> { // 异常处理 return handleException(ex); }); ``` #### 4. 同步工具 Java并发库还提供了多种同步工具,如`Phaser`。`Phaser`是一个灵活的同步屏障,支持多个阶段的同步和动态参与者调整。与传统的`CountDownLatch`和`CyclicBarrier`相比,`Phaser`更加通用且高效。然而,在使用`Phaser`时需要注意避免死锁或资源争用等问题[^4]。 #### 5. 虚拟线程(Java 19+) 从Java 19开始,虚拟线程被引入作为实验性特性。虚拟线程是一种轻量级线程,能够显著降低线程管理的开销,从而提升高并发程序的性能[^3]。 ```java // 使用虚拟线程执行任务 try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { executor.submit(() -> { // 任务逻辑 return result; }); } ``` ### 总结 Java并发库提供了丰富的功能,涵盖了原子操作、线程池管理、同步工具以及异步编程等多个方面。通过合理使用这些工具,开发者可以构建高效、可靠的并发程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值