java 线程池
来源:互联网 发布:一不小心买了淘宝爆款 编辑:程序博客网 时间:2024/05/22 01:50
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class TestThreadPool_1 {
/**
* @param args
*/
public static void main(String[] args) {
// 创建线程池
// ExecutorService exec = Executors.newFixedThreadPool(3);
//改线程池的缓冲队列的长度为3,初始的最小线程数为2个线程,最大的线程数为3
//当任务进入线程池执行时候:
//当只有2个任务时,线程池中的初始的2个线程就可以搞定,不需要排队和创建新的线程。
//当任务数为5时,线程池中的初始的2个线程做2个任务,3个任务在队列中排队。
//当任务数为6时,线程池中的初始的2个线程做2个任务,3个任务在队列中排队。还有 1个线程,由线程池创建一个新的线程来执行该任务。
//当线程数大于6时,线程池会丢掉其他的任务。(当然可以使用一些策略来对多的任务进行处理AbortPolicy,CallerRunsPolicy,DiscardPolicy, DiscardOldestPolicy)
//handler有四个选择:
//ThreadPoolExecutor.AbortPolicy()
//抛出java.util.concurrent.RejectedExecutionException异常
//ThreadPoolExecutor.CallerRunsPolicy()
//重试添加当前的任务,他会自动重复调用execute()方法
//ThreadPoolExecutor.DiscardOldestPolicy()
//抛弃旧的任务
//ThreadPoolExecutor.DiscardPolicy()
//抛弃当前的任务
//以上情况是任务来的很快,线程池中的线程还没有来得急做完任务。如果任务来的比较慢,线程做事情比较快,任务大于6个的话,理论上也是有可能全部做完,不丢失。
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(3));
// 建立6个线程(可以理解为6个任务)
for (int index = 0; index < 6; index++) {
String task = "task@ " + index;
System.out.println("put " + task);
exec.execute(new ThreadPoolTask(task));
/*try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
// 关闭
exec.shutdown();
}
public static class ThreadPoolTask implements Runnable, Serializable {
private static final long serialVersionUID = 0;
// 保存任务所需要的数据
private Object threadPoolTaskData;
ThreadPoolTask(Object tasks) {
this.threadPoolTaskData = tasks;
}
public void run() {
// 处理一个任务,这里的处理方式太简单了,仅仅是一个打印语句
System.out.println("start .." + threadPoolTaskData);
try {
// // 便于观察,等待一段时间
// Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
threadPoolTaskData = null;
}
}
}
- Java线程:线程池
- java--线程--线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(五):线程池
- Java线程_07_线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- 特征选取
- OnContextMenu
- The user specified as a definer (@'''') does not exist
- .net 网页问题搜集
- 在linux中出现there are stopped jobs 的解决方法
- java 线程池
- centos 6.2用yum安装中文输入法
- 写四个线程,二个加1,二个对一个变量减一
- 一个关于文件下载的问题
- 钱包可以扔一边了 实用iPhone保护壳直接集成钱包功能
- MFC简单皮肤颜色绘制(SetDialogBkColor不再被支持,看 WM_CTLCOLOR消息如何百变控件颜色)
- JSch操作实现SSH命令功能
- 设置mysql最大连接数的方法
- 使用xmpp库loudmouth连接google talk服务器