markdown
### 概览
```text
package java.util.concurrent
Utility classes commonly useful in concurrent programming. This package includes a few small standardized extensible
frameworks, as well as some classes that provide useful functionality and are otherwise tedious or difficult to
implement. Here are brief descriptions of the main components. See also the java.util.concurrent.locks and java.util.
concurrent.atomic packages.
```
```text
java.util.concurrent.atomic
A small toolkit of classes that support lock-free thread-safe programming on single variables.
java.util.concurrent.locks
Interfaces and classes providing a framework for locking and waiting for conditions that is distinct from built-in
synchronization and monitors.
```
### 常用类
```text
CountDownLatch countDownLatch = new CountDownLatch(0);
countDownLatch.getCount();
CyclicBarrier cyclicBarrier = new CyclicBarrier(7);
cyclicBarrier.getParties();
Semaphore semaphore = new Semaphore(6);
try {
semaphore.acquire();
System.out.println(semaphore.drainPermits());
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
```
### 基础操作
#### Callable / Lock
* workQueue, //阻塞队列
ThreadFactory threadFactory, //线程工厂
RejectedExecutionHandler handler //拒绝策略
)
```
```text
# Runtime.getRuntime().availableProcessors()
# 最大池数目判断 io密集型/cpu密集型
```
```text
#拒绝策略
ThreadPoolExecutor.DiscardOldestPolicy() //竞争队列并且不抛出异常
ThreadPoolExecutor.AbortPolicy() //不处理,抛出异常
ThreadPoolExecutor.CallerRunsPolicy() //"调用进程"处理
ThreadPoolExecutor.DiscardPolicy() //抛弃并且不抛出异常
```
*简单示例请看 [Java 线程补充](https://www.monody.net/2023/04/java.html)*
* 1. 读写锁 ```text #参考读者写者PV #ReentrantReadWriteLock implements ReadWriteLock, Serializable 通过ReentrantReadWriteLock获取读锁/写锁 二者互斥 reentrantReadWriteLock.writeLock().lock(); ``` ```text #锁降级是指写锁降级为读锁 ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(false); reentrantReadWriteLock.writeLock().lock(); reentrantReadWriteLock.readLock().lock(); ``` ```text #读锁可以被多个线程共享 ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(false); reentrantReadWriteLock.writeLock().lock(); reentrantReadWriteLock.readLock().lock(); new Thread(() -> { reentrantReadWriteLock.readLock().lock(); System.out.println("读锁完成"); },"writeTest").start(); reentrantReadWriteLock.writeLock().unlock(); #一旦写锁释放,主线程就只剩下读锁 ``` 若想深入理解请查看源代码 AbstractQueuedSynchronizer #### TimeUnit ```text #TimeUnit.SECONDS.sleep(10) 代替了sleep ``` #### Condition ```text Condition condition = reentrantLock.newCondition(); #condition.await() 代替了 wait #condition.signal() 代替了 notify() ``` ### 类型封装 #### 1. Concurrent Collections ```text #from java.util.concurrent ConcurrentSkipListMap ConcurrentSkipListSet ConcurrentHashMap CopyOnWriteArrayList ``` #### 2. atomic ```text #from java.util.concurrent.atomic AtomicBoolean AtomicInteger AtomicLong AtomicReference ``` ### 线程池 ```text #动态线程个数 Executors.newCachedThreadPool(); #固定线程个数 Executors.newFixedThreadPool(number_of_thread); #单个线程个数 Executors.newSingleThreadExecutor(); ``` ```text ThreadPoolExecutor(int corePoolSize, //核心池大小 int maximumPoolSize, //最大池数目 long keepAliveTime, //超时时间 TimeUnit unit, //连接超时单位 BlockingQueue
评论