Java中的信号量和线程池

Java中的信号量和线程池,java,concurrency,Java,Concurrency,我不太清楚Java中信号量的概念,也不太理解它 阅读oracle文档后的体会(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html)和其他一些页面一样,它类似于一个锁,上面有许可证的数量 它通常用于创建资源池。 这里我感到困惑,还有ThreadPoolExecutor,它可以给我一个线程池。那么有什么区别呢?在什么场景中使用哪一个 线程池是一个由多个线程中的一个线程组成的池,这些线程可以集

我不太清楚Java中信号量的概念,也不太理解它

阅读oracle文档后的体会(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html)和其他一些页面一样,它类似于一个锁,上面有许可证的数量

它通常用于创建资源池。
这里我感到困惑,还有ThreadPoolExecutor,它可以给我一个线程池。那么有什么区别呢?在什么场景中使用哪一个

线程池是一个由多个线程中的一个线程组成的池,这些线程可以集中管理。在Java中,ThreadPoolExecutor还有一个队列,当您为它提供可运行或可调用的执行权限时,它可以返回一个未来,允许您控制任务或获得结果

一个信号量只允许您获得多个许可证,例如,它最多允许两个线程运行某些代码。您需要运行多个线程才能使其发挥作用,但在其他方面它们是不相关的


顺便说一句:我会阅读Java 7的文档,因为Java 5.0已经下线一段时间了,Java 6几乎要结束免费服务了。

首先,没有愚蠢的问题

允许多个线程“获取”资源。他们应该检查资源是否可用。它就像一个流量控制阀

A用于独占访问。一次只有一个线程

允许您使用有限数量的线程运行某些代码(可运行或可调用类)。您不必费心自己构建它,它已经在JSEAPI中为您实现了。你可以用一些信号灯和队列做你自己的。。。但是如果你没有一个好的理由,不要浪费你的时间

您必须实现一个web服务器,该服务器接收对端口80的一些请求。您不希望使用侦听此端口的同一线程来处理整个请求(这是一种资源浪费…)。您可以使用ThreadPoolExecutor处理请求、处理请求并响应客户端。ThreadPoolExecutor可以配置为利用当前CPU:此体系结构和此任务的最佳威胁数

这是一本很好的书,可以增进你对这件事的了解


我希望这对您有所帮助,并为我的基础英语感到抱歉。

感谢您为java 7文档指点。我只是用谷歌搜索并打开了链接。谷歌的链接有点过时了。它通常会给你1.4.2.Google搜索:“java7xxx”,其中XXX=类名99%的时间有效。例如:。