ConcurrentHashMap 作用: 是一个线程安全且高效的哈希表,支持并发访问。 用法: 多个线程可以同时进行读写操作,而不会导致线程安全问题。
ConcurrentHashMap < String , Integer > map = new ConcurrentHashMap < > ( ) ;
map. put ( "key1" , 1 ) ;
Integer value = map. get ( "key1" ) ;
map. computeIfAbsent ( "key2" , k -> 2 ) ;
AtomicInteger 作用: 提供一种线程安全的方式对 int 类型进行原子操作,如增减、比较。 用法: 适用于需要频繁对数值进行无锁操作的场景。
AtomicInteger atomicInt = new AtomicInteger ( 0 ) ;
atomicInt. incrementAndGet ( ) ;
atomicInt. decrementAndGet ( ) ;
atomicInt. compareAndSet ( 1 , 2 ) ;
Semaphore 作用: 控制访问资源的线程数,可以用来实现限流或访问控制。 用法: 在资源有限的情况下,控制同时访问的线程数量。
Semaphore semaphore = new Semaphore ( 3 ) ;
try {
semaphore. acquire ( ) ;
} finally {
semaphore. release ( ) ;
}
CyclicBarrier 作用: 让一组线程到达一个共同的同步点,然后一起继续执行。常用于分阶段任务执行。 用法: 适用于需要所有线程在某个点都完成后再继续的场景。
CyclicBarrier barrier = new CyclicBarrier ( 3 , ( ) -> {
System . out. println ( "所有线程都到达了屏障点" ) ;
} ) ;
Runnable task = ( ) -> {
try {
barrier. await ( ) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
} ;
new Thread ( task) . start ( ) ;
new Thread ( task) . start ( ) ;
new Thread ( task) . start ( ) ;
CountDownLatch 作用: 一个线程(或多个)等待其他线程完成操作。 用法: 适用于主线程需要等待多个子线程完成任务的场景。
CountDownLatch latch = new CountDownLatch ( 3 ) ;
Runnable task = ( ) -> {
try {
} finally {
latch. countDown ( ) ;
}
} ;
new Thread ( task) . start ( ) ;
new Thread ( task) . start ( ) ;
new Thread ( task) . start ( ) ;
latch. await ( ) ;
System . out. println ( "所有任务都完成了" ) ;
BlockingQueue 作用: 是一个线程安全的队列,支持阻塞操作,适用于生产者-消费者模式。 用法: 生产者线程将元素放入队列,消费者线程从队列中取元素,队列为空时消费者线程阻塞。
BlockingQueue < String > queue = new LinkedBlockingQueue < > ( ) ;
Runnable producer = ( ) -> {
try {
queue. put ( "item" ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
} ;
Runnable consumer = ( ) -> {
try {
String item = queue. take ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
} ;
new Thread ( producer) . start ( ) ;
new Thread ( consumer) . start ( ) ;