- 浏览: 434318 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (144)
- java (32)
- Flex (11)
- linux (15)
- 思维至上 (2)
- 生活 (4)
- spring2.5.5 (3)
- Design pattern (0)
- jdk1.6 (1)
- erlang (14)
- mysql (5)
- nginx (10)
- 互联网 (1)
- 用户体验 (0)
- jvm (8)
- hibernate (0)
- oracle (0)
- mvn (2)
- 23种常用设计模式详细讲解及实例 (1)
- nosql (1)
- mongodb (2)
- thrift (1)
- 负载均衡 (1)
- Objective-c (1)
- fuck (1)
- resin (3)
- log4j (2)
- android (1)
- jps (0)
- lucene (2)
- rsync (1)
- python (1)
- java性能分析 (1)
- spring (1)
- zookeeper (2)
- error (1)
- 算法 (1)
- hudson (1)
- svn (1)
- maven (1)
- svn server (2)
- swap linux (1)
- 协同过滤 (1)
- 邮件系统 (1)
最新评论
-
cheetah747:
我也遇到这个问题了,不过我是直接把第三方jar放到工程文件的l ...
JAVA NoClassDefFoundError: -
dxm1986:
hillfallshore 写道亲 你这是杜撰的小说吗?完全是 ...
面试有感 -
dxm1986:
mengda1027 写道从实习生到高级java到架构师,是在 ...
面试有感 -
dxm1986:
kljjack 写道一个编程十几年,每年看几十本技术书籍,技术 ...
面试有感 -
dxm1986:
轻指飞扬 写道呵呵,挺好玩的~ 我怎么感觉你招人不是很有诚意嘛 ...
面试有感
As we all know ,we use the Executors.newCachedThreadPool() to create a thread pool which will use the SynchronousQueue to cache the not yet execute task.Then we will come to a problem:The cache queue will cache more and more Task waiting to be execute through the threadpool cann't execute the task in time.Oh,then we will get a exception :"OutOfMemory".That a terrible thing.
Then what can we do for that ? We are sure that should be stopped. When that case appearances, there must be something wrong happened to your system,but we cann't let it go.We can do just like this:
import java.util.Date; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; /** * @author dengxiaoming E-mail: xiaoming.deng@renren.com * @version createtime:2011-9-13 下午07:41:29 * */ public class ThreadPoolTest { /** * @param args */ public static void main(String[] args) { ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(5); int end = 11; final AtomicInteger count = new AtomicInteger(); ExecutorService service = new ThreadPoolExecutor(0,5, 60L, TimeUnit.SECONDS, queue, new MyThreadFactory(), new MyRejectedExecutionHandler()); for(int i=0; i<end; i++) { System.out.println("start i:" + i); service.submit(new Runnable(){ public void run() { try { Thread.sleep(100); System.out.println("0----------" + count.getAndIncrement()); } catch (Exception e) { e.printStackTrace(); } } }); System.out.println("it's over ...."); } } private static class MyThreadFactory implements ThreadFactory{ final ThreadGroup group; final AtomicInteger threadNumber = new AtomicInteger(1); final String namePrefix; final String nameSuffix = "]"; final static String defaultThreadPoolName = "ThreadPool_Test_DefaultName"; public MyThreadFactory(){ this(defaultThreadPoolName); } public MyThreadFactory(String poolName) { SecurityManager s = System.getSecurityManager(); group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); namePrefix = "ThreadPool_Test_" + poolName + " _Pool [Thread-"; } public MyThreadFactory(String poolName, ThreadGroup threadGroup) { group = threadGroup; namePrefix = "ThreadPool_Test_" + poolName + "_Pool [Thread-"; } public ThreadGroup getThreadGroup() { return group; } public Thread newThread(Runnable r) { Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement() + nameSuffix, 0); t.setDaemon(true); if (t.getPriority() != Thread.NORM_PRIORITY) t.setPriority(Thread.NORM_PRIORITY); return t; } } private static class MyRejectedExecutionHandler implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { //log the exception for error analysis System.out.println(new Date().toString() + "------ :reject the r.toString() " + r.toString()); throw new RejectedExecutionException(); } } }
Then after the waiting or running task number reached 10(5+5) you will get a RejectedExecution.
What should you do with those RejectedExecution is check your system and try to find out the reason .
发表评论
-
what the fucking code
2012-04-12 14:08 1191public class MemInfo<T ex ... -
Jps介绍以及解决jps无法查看某个已经启动的java进程问题
2012-03-07 16:41 0Jps介绍以及解决jps无法查看某个已经启 ... -
java.lang.UnsupportedOperationException
2012-02-17 15:01 2137在使用Arrays.asList()后调用add,r ... -
设计模式
2011-10-09 11:05 94023种常用设计模式详细 ... -
JVM调优与监控
2011-09-17 10:57 1686随时记录,方便以后 ... -
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta
2011-09-10 13:03 1630Java 内存泄露监控工具(一) -- JV ... -
两个shell脚本,希望大家能够用上
2011-09-08 14:46 1111第一个 定时抓取服务器JVM相关信息 #! /bin/s ... -
责任链
2011-09-05 18:26 963其实我一直都不太喜欢去死记硬背那些神马设计模式,但不得不说,你 ... -
jstat的使用方法
2011-08-30 23:30 7688jstat的使用方法 http: ... -
JVM参数配置大全
2011-08-07 09:42 1246JVM参数配置大全[转] 2010-01-14 ... -
JAVA NoClassDefFoundError:
2011-07-24 05:31 49625NoClassDefFoundError: 我 ... -
单实例设计模式
2011-07-15 15:30 802今天讲一下单实例模式 A: public ... -
java关键字:Volatile,Transient,strictfp
2011-06-27 10:04 868Volatile修饰的成员变量 ... -
使用JDK 1.6自带的jvisualvm监控远程服务器中Java程序资源占用情况
2011-05-06 09:36 7732使用JDK 1.6自带的jvisualvm监控远程 ... -
java虚拟机参数设置
2011-05-05 20:07 1153java虚拟机参数设置 收藏 ... -
JAVA性能优化—Sun Hotspot JDK JVM参数设置
2011-05-05 18:31 1294JAVA性能优化—Sun Hotspot JDK JVM参 ... -
[转]JVM内存段分配及启动参数
2011-05-05 17:39 22051. JVM内存段分配及启动参数:J2EE服务器的内 ... -
Jconsole
2011-05-04 15:06 1394Jconsole是JDK自带的一个很好的jvm查看工具 ... -
[转]java.lang.OutOfMemoryError
2011-04-29 16:36 3629http://www.blogjava.net/ld ... -
tomcat6 性能调优
2011-04-20 13:31 2790每个web客户端请求对于服务器端来说就一个单独的线程, ...
相关推荐
线程池(threadpool)是计算机程序中一种有效的多线程处理形式,它预先创建一组线程,待有任务需要执行时,从线程池中取出一个线程来执行任务,任务完成后,线程并不销毁,而是返回线程池等待下一次的任务分配。...
threadPool的实现代码
标题中的"ThreadPool"指的是线程池,这是一个编程概念,特别是在多线程编程中非常关键。线程池是一种线程使用模式,它维护着一个工作线程的集合,用于执行一系列的任务。通过线程池,可以有效地管理和控制并发执行的...
Boost库是C++编程语言中的一个流行开源库,提供了丰富的功能,其中包括线程池(Boost.Threadpool)模块。本文将深入探讨如何使用Boost库中的线程池来处理具有优先级的任务,以及普通任务的执行。 首先,我们需要...
ThreadPool 线程池管理单元 带调用例子
A class for implementing a thread with a message pump on it. There is an example derived class and an example MFC application. The class itself does not require MFC执行一个弹出消息的线程
Python中的`threadpool`库是实现多线程处理任务的一种工具,它提供了一种方便的方式来组织和管理线程池,从而高效地并发执行大量任务。`threadpool`库并不是Python标准库的一部分,而是由第三方开发者提供的扩展。在...
threadpool线程池学习
在"threadpool.tar.gz"压缩包中,包含两个文件:threadpool.cc和threadpool.h,它们很可能是实现线程池的源代码文件。这里我们将详细讨论C++11引入的线程库以及如何在Linux/MacOS平台上利用这些新特性构建线程池。 ...
【Python】python threadpool python多线程 Python语言基础 文件清单 └── threadpool-1.2.7 ├── CHANGELOG.txt ├── doc │ ├── api │ │ ├── class-tree.html │ │ ├── epydoc.css │ │...
主要类包括`ThreadWithAttributes`、`ControlRunnable`、`ThreadPool`、`MonitorRunnable`和`ThreadPoolListener`等,这些类构成了线程池的主要框架。 1. **`ThreadWithAttributes`**:这个类负责设置和获取线程...
线程池是多线程编程中的一个重要概念,它在Java和其他许多编程语言中都有广泛的应用。线程池的出现主要是为了提高系统资源的利用率、减少系统创建和销毁线程的开销,以及对并发任务进行有效管理和调度。...
本篇文章将围绕“VC++ ThreadPool程序”进行详细讲解,旨在帮助读者理解和掌握如何在VC++环境中构建和使用线程池。 线程池是一种线程使用模式,它预先创建一组线程,等待任务到来时分配给这些线程执行,而不是每次...
在.NET框架中,`ThreadPool`是一个非常重要的概念,它是一个预先初始化的线程集合,用于高效地执行异步任务。`ThreadPool`管理线程的创建和销毁,优化系统资源的使用,尤其适合处理大量短生命周期的任务。本示例将...
ThreadPool-master.zip这个压缩包很可能包含一个C++实现线程池的项目。 线程池的工作原理是:当有新的任务需要执行时,不会立即创建新的线程,而是从线程池中取出一个已经存在的线程来执行任务。如果线程池中的所有...
在标题"threadpool_informationmcb_threadpool_c++threadpool_"中,"informationmcb"可能代表信息管理和控制块,而"threadpool"显然是指线程池,"c++threadpool"则表明我们关注的是C++实现的线程池。 C++11引入了对...