执行器框架是使用线程池概念设计的。线程池是重用已经创建的线程的方法,而不是每次执行当前任务都创建一个新线程的方法。
Executors类提供了一种工厂方法来创建线程池。ThreadPoolExecutor类是从许多Executors工厂方法返回的执行器的基本实现。
序号 | 键 | 固定线程池 | 缓存线程池 |
---|---|---|---|
1 |
基本的 |
根据Java Doc- 创建一个线程池,该线程池重用在共享的无边界队列上运行的固定数量的线程。在任何时候,最多nThreads个线程都是活动的处理任务。如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到某个线程可用为止。如果在关闭之前执行过程中由于执行失败导致任何线程终止,则在执行后续任务时将使用新线程代替。池中的线程将一直存在,直到明确将其关闭。 |
根据Java Doc- 创建一个线程池,该线程池可根据需要创建新线程,但在可用时将重用先前构造的线程。这些池通常将提高执行许多短暂的异步任务的程序的性能。如果可用,执行调用将重用以前构造的线程。如果没有可用的现有线程,则将创建一个新线程并将其添加到池中。 |
2 |
队列 |
它使用阻塞队列。 |
它使用SynchronousQueue 队列。 |
3 |
线程寿命 |
它将使所有线程一直运行,直到它们被明确终止 |
六十秒未使用的线程被终止并从缓存中删除 |
4。 |
线程池大小 |
线程池大小是固定的,因此不会增长。 |
线程池可以从零个线程增长到Integer.MAX_VALUE |
5, |
用例 |
当我们想限制并发任务时,我们应该使用fixedthreadpool |
当您有很多可预测的任务时,可以使用它。 |
public class Main { public static void main(String args[]) throws InterruptedException { ExecutorService executors = Executors.newFixedThreadPool(4); CountDownLatch latch= new CountDownLatch(2); executors.submit(new Service1(latch)); executors.submit(new Service2(latch)); latch.await(); System.out.println("Done"); } import java.util.concurrent.CountDownLatch; public class Service1 implements Runnable { CountDownLatch latch; public Service1(CountDownLatch latch) { super(); this.latch = latch; } @Override public void run() { try { Thread.sleep(20000); } catch (InterruptedException e) { //TODO自动生成的捕获块 e.printStackTrace(); } latch.countDown(); System.out.println("Services2"+latch.getCount()); } } import java.util.concurrent.CountDownLatch; public class Service2 implements Runnable { CountDownLatch latch; public Service2(CountDownLatch latch) { super(); this.latch = latch; } @Override public void run() { try { Thread.sleep(20000); } catch (InterruptedException e) { //TODO自动生成的捕获块 e.printStackTrace(); } latch.countDown(); System.out.println("Services2"+latch.getCount()); } }
主要内容:一、MySql中的线程,二、主要方式,三、源码流程,四、总结一、MySql中的线程 在mysql中,每一个连接上来,就会分配给一个相关的THD数据类。在前面的分析中可以看到,连接器(Connectors)连接到的直接就是连接池,在连接池的线程处理中分为三部分,即一对一(一个连接对应一个线程),多对一(多个连接对应一个线程)和线程池(多对多)。 线程池和线程可以针对不同的具体场景来处理具体的事务,这样既兼顾了效率又提高了适应性,对于新手来说,这就是设计的一个
本文向大家介绍ScheduledThread池和单线程执行器之间的区别。,包括了ScheduledThread池和单线程执行器之间的区别。的使用技巧和注意事项,需要的朋友参考一下 序号 键 预定线程池 单线程执行器 1 基本的 创建一个线程池,该线程池可以安排命令在给定的延迟后运行或定期执行。 确保任务按顺序执行,并且在任何给定时间都不会激活一个以上的任务 2 队列 它使用延迟队列存储任务。根据
我刚刚开始研究Java的类和方法。根据API,生成的线程池重用现有的对象来执行新任务。 我有点困惑这是如何实现的,因为我在API中找不到任何方法可以设置现有对象的行为。 例如,可以从对象创建新的,这使得调用的方法。但是,API中没有将作为参数的setter方法。 我会很感激你的指点。
问题内容: 我刚刚开始研究Java的类和方法。根据API,生成的线程池将现有对象重用于新任务。 我对此感到有些困惑,因为我无法在API中找到任何方法来设置现有对象的行为。 例如,您可以创建一个 新的 从一个对象,这使得调用的方法。但是,API中没有使用a 作为参数的setter方法。 我将不胜感激任何指针。 问题答案: 执行人员在后台为您完成所有工作。是的,它仅使用现有的线程API。 下面的链接提
接收到数据时回调此函数,发生在worker进程中。函数原型: function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data); $server,swoole_server对象 $fd,TCP客户端连接的唯一标识符 $reactor_id,TCP连接所在的Reactor线程ID $data,收到的数
SOFARPC 支持自定义业务线程池。可以为指定服务设置一个独立的业务线程池,和 SOFARPC 自身的业务线程池是隔离的。多个服务可以共用一个独立的线程池。 SOFARPC 要求自定义线程池的类型必须是 com.alipay.sofa.rpc.server.UserThreadPool。 XML 方式 如果采用 XML 的方式发布服务,可以先设定一个 class 为 com.alipay.sof