0 0

ThreadPoolExecutor 大量任务执行过程中会出现重复执行0

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 24, 3,
				TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(12),
				new ThreadPoolExecutor.DiscardOldestPolicy());

for (int i = 1; i <= 3873; i++) {
			try {
				String task = "task@ " + i;
				Thread.sleep(800);
				threadPool.execute(new ThreadPoolTask(task));
				//Thread.sleep(produceTaskSleepTime);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}



打印的日志有发现相同的task被执行了两次,时间不同,很奇怪不知道是什么原因?
2012年6月11日 15:11

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

0 0

很明显 new ArrayBlockingQueue<Runnable>(12)固定了队列的大小,Thread.sleep(800);  进行了延迟,那么采用 new ThreadPoolExecutor.DiscardOldestPolicy()拒绝方式的话肯定会把之前的丢弃,由于有延迟之前的可能被执行了

2012年6月12日 08:29
0 0

ThreadPoolExecutor.DiscardOldestPolicy
RejectedExecutionHandler用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试 execute;如果执行程序已关闭,则会丢弃该任务。

我估计你的程序碰到了这个情况吧,所以会重复执行~~~

2012年6月11日 18:07
0 0

ThreadPoolTask???
代码呢

2012年6月11日 16:30

相关推荐

    java 线程池例子ThreadPoolExecutor

    * Android 应用:ThreadPoolExecutor 可以用于 Android 应用中,处理大量的后台任务。 ThreadPoolExecutor 是 Java 中一个非常重要的线程池实现类,它提供了一个高效、灵活的线程池解决方案。它可以动态地调整...

    线程池ThreadPoolExecutor

    线程池是Java中一种高效的线程管理工具,它的出现是为了优化线程的创建和销毁过程,因为这两个操作在实际应用中可能会消耗大量资源。线程池通过预先创建一定数量的线程,使得任务能够迅速分配到线程上执行,从而提高...

    多线程定时任务邮件服务

    更推荐使用`ScheduledExecutorService`,它提供了更灵活的定时和周期性任务调度功能,包括延迟执行和固定间隔重复执行。 3. **JavaMail API**: JavaMail API是Java中用来处理邮件通信的标准库,它提供了一系列...

    Java 线程池框架核心代码分析1

    2. `FixedThreadPool`:固定大小的线程池,适合处理大量重复的、计算密集型的任务。 3. `SingleThreadPool`:单线程线程池,所有任务按顺序执行,保证任务的执行顺序,适用于需要线程安全的场景。 4. `...

    线程池技术研究与应用.pdf

    线程在执行任务过程中,会经历多种生命周期状态,包括New、Runnable、Blocked、Waiting、TimedWaiting和Terminated等。线程池通过这些状态的管理,合理地调度线程执行任务。 在线程池技术中,线程同步是一个不可...

    线程池管理源码 java 源码

    1. **单线程池**:保证所有任务都在同一线程中顺序执行,适合需要保持任务执行顺序的场景。 2. **定长线程池**:核心线程数与最大线程数相等,不会动态调整,适合处理长期运行的任务。 3. **缓存线程池**:没有核心...

    JAVA集中常用的线程池比较共8页.pdf.zip

    只有一个核心线程,所有任务都会按顺序执行,确保任务执行的顺序性,不会出现并发问题。适合执行需要严格串行化的任务。 3. **缓存线程池** (`Executors.newCachedThreadPool()`): 无核心线程,最大线程数为...

    线程池threadpool_src

    7. **工作完成通知**:线程池可以提供一种机制,当所有任务执行完毕或特定任务完成时,通知调用者。 在实际应用中,线程池常用于处理大量并发I/O操作、定时任务调度、并行计算等场景。Java中的`java.util....

    java 四种线程池实例

    4. **ScheduledThreadPool**: `Executors.newScheduledThreadPool(int corePoolSize)`创建一个支持定时及周期性任务执行的线程池。它可以安排任务在未来某个时间点执行,或者周期性地重复执行。这对于需要定时任务的...

    JAVA线程池例子

    在`TestThreadPool`这个示例中,很可能会包含如何创建线程池,提交任务,以及展示不同线程池配置对任务执行效率和系统资源的影响等内容。理解并熟练运用线程池是Java并发编程的关键,能够有效提升系统的并发能力和...

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

    3. CachedThreadPool:该类型的线程池可以根据实际情况调整线程数量,适用于执行大量任务。 四、线程池的创建方式 Java中有多种方式可以创建线程池,包括: 1. 使用Executors工具类:Executors工具类提供了多种...

    ThreadPool-master

    1. **线程池概念**:线程池是一组预先创建的线程集合,可以重复利用这些线程来执行任务,避免频繁创建和销毁线程带来的性能开销。在Android中,频繁创建新线程可能会导致内存消耗增加,影响用户体验。 2. **Java...

    11-多线程爬虫-1(1).zip

    在实际项目中,我们可能会遇到大量的异步任务,这时可以使用线程池来管理线程。Python的`concurrent.futures`模块提供了`ThreadPoolExecutor`,允许我们预先创建一定数量的线程,然后将任务放入队列,由线程池中的...

    android下多线程示例代码

    它会在一个单独的工作线程中运行,任务执行完毕后会自动停止服务,降低了内存占用。适用于无需长时间运行的后台任务。 5. **ExecutorService/ThreadPoolExecutor/FutureTask**: 这是Java并发编程框架的一部分,...

    Python实现的线程池

    - **同步控制**:线程池提供了一些同步机制,如Future对象,方便获取任务执行结果。 在Python2.7中,由于缺乏高级的并发工具,自行实现线程池可以帮助开发者更好地控制并发任务,同时也可以为向Python3迁移做好准备...

    异步调度设计

    在IT行业中,异步调度设计是一种关键的技术,它在处理大量数据、优化系统性能和提升用户体验方面发挥着重要作用。在本文中,我们将深入探讨异步调度设计的核心概念、原理以及其实现方式,同时也会提及一些相关的工具...

    Java线程池技术详解

    - **Executors.newFixedThreadPool(int nThreads)**: 创建固定大小的线程池,线程数量不变,适合执行大量重复性的任务。 - **Executors.newCachedThreadPool()**: 创建一个可缓存的线程池,当线程池为空时,会自动...

    笔记-6、线程池1

    - `newFixedThreadPool(int nThreads)`: 创建固定大小的线程池,线程数量始终保持不变,适合处理大量重复的任务。 - `newSingleThreadExecutor()`: 创建单线程线程池,所有任务都会按照提交的顺序依次执行,确保任务...

    异步线程池加载网络图片

    在Android开发中,异步加载网络图片是一项至关重要的任务,特别是在设计用户界面(UI)时。这涉及到在后台线程处理耗时的操作,如下载和解码图片,以避免阻塞主线程,确保应用程序的流畅性和响应性。下面将详细探讨...

    Android大量图片加载的3级缓存

    在Android中,图片加载前进行压缩是非常重要的,因为未经压缩的大尺寸图片会消耗大量内存,可能导致应用崩溃。常见的压缩方式有: - **质量压缩**:通过调整JPEG或PNG的压缩级别来减小文件大小。 - **尺寸压缩**:...

Global site tag (gtag.js) - Google Analytics