Java -- 每日一问:Java并发包提供了哪些并发工具类?

Posted Kevin-Dev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 每日一问:Java并发包提供了哪些并发工具类?相关的知识,希望对你有一定的参考价值。

典型回答

我们通常所说的并发包也就是 java.util.concurrent 及其子包,集中了 Java 并发的各种基础工具类,具体主要包括几个方面:

  • 提供了比 synchronized 更加高级的各种同步结构,包括 CountDownLatch、CyclicBarrier、Semaphore 等,可以实现更加丰富的多线程操作,比如利用 Semaphore 作为资源控制器,限制同时进行工作的线程数量。

  • 各种线程安全的容器,比如最常见的 ConcurrentHashMap、有序的 ConcurrentSkipListMap,或者通过类似快照机制,实现线程安全的动态数组 CopyOnWriteArrayList 等。

  • 各种并发队列实现,如各种 BlockingQueue 实现,比较典型的 ArrayBlockingQueue、 SynchronousQueue 或针对特定场景的 PriorityBlockingQueue 等。

  • 强大的 Executor 框架,可以创建各种不同类型的线程池,调度任务运行等,绝大部分情况下,不再需要自己从头实现线程池和任务调度器。

一课一练

留给你的思考题是,你使用过类似 CountDownLatch 的同步结构解决实际问题吗?谈谈你的使用场景和心得。
回答:
1)CountDownLatch和CyclicBarrier都能够实现线程之间的等待,只不过它们侧重点不同:
CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行;
而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行;
另外,CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。

2)Semaphore其实和锁有点类似,它一般用于控制对某组资源的访问权限。

你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

以上是关于Java -- 每日一问:Java并发包提供了哪些并发工具类?的主要内容,如果未能解决你的问题,请参考以下文章

Java -- 每日一问:Java提供了哪些IO方式? NIO如何实现多路复用?

Java -- 每日一问:Java提供了哪些IO方式? NIO如何实现多路复用?

Java -- 每日一问:Java常见的垃圾收集器有哪些?

Java -- 每日一问:Java程序运行在Docker等容器环境有哪些新问题?

Java -- 每日一问:有哪些方法可以在运行时动态生成一个Java类?

Java -- 每日一问:谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?