0 0

线程池execute与queue add 区别5

	private BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();   
	private ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 50, 10, TimeUnit.SECONDS, queue);  


请问大婶们,queue.add() 与 executor.execute() 区别,源码实在看的头晕@@

问题补充:另 16个cpu 没开启ht cpu cores 1,并发高,请问线程池开多大比较合适?

问题补充:另,高并发除了用线程池外还有什么可以高效并行处理?
2013年8月01日 17:53

4个答案 按时间排序 按投票排序

0 0

采纳的答案

引用
queue.add() 与 executor.execute() 区别

这个...关公战秦琼吗?

queue就是个阻塞队列,add方法是往里面塞东西,不成功抛异常。
通常会用push,和add的区别是不成功则等待。

executor是任务执行器,execute是执行个任务(Runnable接口)的。内部会新建个线程或重用个线程等方式来执行这个任务。
通常推荐用ExecutorService的submit方法来拿结果处理异常等。

这两个东西没多大关系,谈区别也只能说:“它们是两种不同的东西?!”


另外,ThreadPoolExecutor 这个类属于底层实现类,实际使用过程中推荐用Executors这个工厂类来获得实例,不推荐直接使用。

当然如果你是学习目的,那就可以无视推荐了。

关于CPU,理想效果是所有CPU都干活(如果这台机器专门跑这个程序的话)。
但貌似不同系统,线程和系统进程之间的关系比较复杂,可能只能调调试试了吧。

最大值应该是不要超过实际CPU数量来着...

2013年8月01日 22:46
0 0

如果你直接往threadpool的queue里面放task,那么表现的结果会和threadpool提交任务不一样:
1. 直接往threadpool提交任务时,如果threadpool 没有到达最大线程数,会直接创建线程执行任务,而不会进去queue
2. Threadpool有RejectedExecution的机制,在无法往queue中offer的时候,会调用一个拒绝机制。而直接调用add方法,一般的queue实现中,会尝试一下offer,没有拒绝以后的机制。

2013年8月02日 16:38
0 0

如果你直接往threadpool的queue里面放task,那么表现的结果会和threadpool提交任务不一样:
1. 直接往threadpool提交任务时,如果threadpool 没有到达最大线程数,会直接创建线程执行任务,而不会进去queue
2. Threadpool有RejectedExecution的机制,在无法往queue中offer的时候,会调用一个拒绝机制。而直接调用add方法,一般的queue实现中,会尝试一下offer,没有拒绝以后的机制。

2013年8月02日 16:38
0 0

如果你直接往threadpool的queue里面放task,那么表现的结果会和threadpool提交任务不一样:
1. 直接往threadpool提交任务时,如果threadpool 没有到达最大线程数,会直接创建线程执行任务,而不会进去queue
2. Threadpool有RejectedExecution的机制,在无法往queue中offer的时候,会调用一个拒绝机制。而直接调用add方法,一般的queue实现中,会尝试一下offer,没有拒绝以后的机制。

2013年8月02日 16:36

相关推荐

    线程池的submit和execute的区别.md

    ### 线程池的submit和execute方法的区别详解 #### 一、引言 线程池作为Java并发编程中的一项关键技术,在实现高效并发任务管理方面发挥着重要作用。而在实际开发中,开发者经常会遇到两种用于向线程池提交任务的...

    day07【线程池、Lambda表达式】(1).md

    - **概念**:在多线程环境中,不同线程处理同一资源的不同动作时,需要进行线程间的沟通与协调。如一个线程负责生产包子(生产者),另一个线程负责消费包子(消费者),这两个线程之间就存在着线程间通信的需求。 -...

    ThreadPoolExecutor线程池原理及其execute方法(详解)

    ThreadPoolExecutor线程池原理及其execute方法详解 ThreadPoolExecutor是Java并发包中提供的线程池类,用于管理和执行异步任务。ThreadPoolExecutor的执行原理可以分为四个步骤: 1.核心线程池:...

    java线程池execute源码-performance:表现

    java线程池execute源码 简介 由于本人工作需要,需要解决一些性能问题,虽然有 Profiler 、Systrace 等工具,但是无法实时监控,多少有些不方便,于是计划写一个能实时监控性能的小工具。经过学习大佬们的文章,最终...

    java线程池execute源码-android-lite-async:Crossbow(LiteAsync)是一个改进的、增强的Androi

    java线程池execute源码 android-lite-async An ameliorative, enhanced AsyncTask for Android. LiteAsync provides SimpleTask, SafeTask, CachedTask, etc, for rapid development. More convenient is, it has a ...

    java线程池概念.txt

    线程池的排队策略与BlockingQueue有关。 threadFactory:线程工厂,主要用来创建线程:默认值 DefaultThreadFactory; handler:表示当拒绝处理任务时的策略,就是上面提及的reject操作;有以下四种取值:  ...

    多线程正确调用,避免假死

    1. **使用ThreadPool**:ThreadPool是一个线程池,它管理一组可重用线程,可以高效地执行多个异步任务,而无需创建新的线程,从而减少资源消耗。 2. **异步编程**:使用`async/await`关键字进行异步编程,可以确保...

    Java实现通用线程池

    ThreadPool类用于管理线程池中的线程,提供了多个方法来管理线程池,例如submit、execute、shutdown等方法。 在使用线程池时,我们需要首先创建一个线程池,然后将任务提交给线程池,线程池会自动选择空闲线程执行...

    Quartz 线程池

    3. **监控与调整**:实时监控 Quartz 的运行状态,如线程池的利用率、任务执行时间等,以便及时发现并解决问题。 ### 五、实战案例 在实际项目中,我们可以利用 Quartz 设计定时任务,例如定期备份数据库、清理...

    自定义实现Java线程池

    #### 五、线程池状态与生命周期管理 在实际应用中,线程池还需要具备管理自身状态的能力,例如启动、关闭等。这些功能可以通过额外的方法来实现。此外,还需要处理非核心线程的超时回收等问题,这些细节在此不作...

    线程池简单实现chenjiegui

    此外,线程池还可以通过`execute()`方法提交Runnable任务,或通过`submit()`方法提交Callable任务,并返回Future对象,以便于获取任务执行结果。 在实际应用中,我们还可以使用`Executors`类提供的静态工厂方法快速...

    DELPHI的ThreadPool的线程池DEMO

    DELPHI的线程池(ThreadPool)是一种高效管理并发任务的技术,它允许程序在需要时创建线程,而不是每次需要执行任务时都手动创建。线程池通过预先创建一组线程,然后根据需要分配任务,减少了线程创建和销毁的开销,...

    线程池管理多线程上传

    - **工作队列(Work Queue)**:线程池中存储待执行任务的队列,线程从队列中取出任务进行处理。 - **线程工厂(ThreadFactory)**:用于创建新线程,可以自定义线程的初始化行为。 - **拒绝策略(Rejection ...

    java线程池实例详细讲解

    5. **生命周期管理**:线程池提供了一些方法来控制其生命周期,如`execute()`用于提交任务,`shutdown()`用于关闭线程池但不立即停止所有正在执行的任务,而`shutdownNow()`则尝试停止所有正在执行的任务并关闭...

    java.util.concurrent 实现线程池队列

    线程池的工作队列(Queue)是线程池的重要组成部分,不同的队列类型会影响线程池的行为。常见的工作队列类型包括: 1. **ArrayBlockingQueue**:基于数组的有界阻塞队列,公平或非公平的锁实现,适合大多数线程池...

    线程池学习笔记doc文档

    当一个任务通过 `execute(Runnable)` 方法被添加到线程池时,线程池会根据当前的情况来决定如何处理该任务。具体来说,线程池的工作机制可以分为以下几步: 1. 如果当前线程池中的数量小于 `corePoolSize`,即使...

    线程池的实现以及底层原理.docx

    execute()方法和submit()方法都是线程池的提交任务方法,但是它们有所不同: 1. execute()方法:execute()方法用于提交不需要返回值的任务,无法判断任务是否执行成功。 2. submit()方法:submit()方法用于提交需要...

    java线程池封装j

    - **监控与调优**:通过JMX或其他监控工具实时监控线程池状态,根据监控数据调整参数。 ### 5. 小结 Java线程池封装是Java并发编程中重要的一环,合理的线程池配置和封装能显著提升程序的性能和稳定性。理解线程池...

    线程池源码

    1. **工作队列(Work Queue)**:线程池内部维护了一个任务队列,用来存储待执行的任务。当提交新任务时,如果线程池中的工作线程数量未达到最大值,新任务会被立即执行;若达到最大值,任务会暂存于工作队列中,...

    Java线程池使用说明

    在Java中,与线程池相关的几个重要类和接口包括: 1. Executor:它是Java中线程池的顶级接口,定义了执行线程的抽象方法,但它本身并不直接提供线程池功能。 2. ExecutorService:是真正的线程池接口,提供了一...

Global site tag (gtag.js) - Google Analytics