线程解决并发问题
2015-11-24 10:46
477 查看
public final class MyThreadPool {
/**
* 线程池大小设置,系统设计等待时间最长为3000ms,单次查询数据库大约消耗600ms
* <P>
* 故而FACTOR设置为6 FACTOR = (1+WT/ST);
*/
private static final int FACTOR = 6;
/**
* 线程池大小设置,N为CPU核心数
* <P>
* N = N * FACTOR
*/
private static final ExecutorService executorService = Executors
.newFixedThreadPool(Runtime.getRuntime().availableProcessors()
* FACTOR);
private MyThreadPool() {
}
/**
* 执行线程
*
* @param command
*/
public static void execute(Runnable command) {
executorService.execute(command);
}
@SuppressWarnings("rawtypes")
public static Future submit(Runnable task) {
return executorService.submit(task);
}
}
在定义一个类继承Thread,实现run方法,在该方法中写相关逻辑;
new一个该自定义的类,名称自定义,放在submit中,如下。
Future future = MyThreadPool.submit(qdt);
然后
/**
* 等待各个线程任务完成
* @param futures
*/
private void waitForThreads(List<Future> futures) {
if (futures != null) {
for (Future future : futures) {
try {
future.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
}
即可。
/**
* 线程池大小设置,系统设计等待时间最长为3000ms,单次查询数据库大约消耗600ms
* <P>
* 故而FACTOR设置为6 FACTOR = (1+WT/ST);
*/
private static final int FACTOR = 6;
/**
* 线程池大小设置,N为CPU核心数
* <P>
* N = N * FACTOR
*/
private static final ExecutorService executorService = Executors
.newFixedThreadPool(Runtime.getRuntime().availableProcessors()
* FACTOR);
private MyThreadPool() {
}
/**
* 执行线程
*
* @param command
*/
public static void execute(Runnable command) {
executorService.execute(command);
}
@SuppressWarnings("rawtypes")
public static Future submit(Runnable task) {
return executorService.submit(task);
}
}
在定义一个类继承Thread,实现run方法,在该方法中写相关逻辑;
new一个该自定义的类,名称自定义,放在submit中,如下。
Future future = MyThreadPool.submit(qdt);
然后
/**
* 等待各个线程任务完成
* @param futures
*/
private void waitForThreads(List<Future> futures) {
if (futures != null) {
for (Future future : futures) {
try {
future.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
}
即可。
相关文章推荐
- 工厂方法模式 更切合实际的需求 带仓库材料判断
- (Alpha)Let's-M1后分析报告
- 使用第三方应用授权时应用调用OAuth一直出现redirect_uri参数错误
- vim 插件tags小记
- jquery实现移动端点击图片查看大图特效
- WebViewJavascriptBridge Demo (js与native之间的数据互动)
- Eclipse中如何调整字体
- 阶乘
- MyEclipse无法启动调试:Cannot connect to VM
- 查看Eclipse版本号,及各个版本区别
- 嵌套箱问题
- HDU 4862 Jump 最大费用最大流
- navigation右侧添加多个按钮(三种方法)
- Java基本语法学习时需要注意的几点
- oc声明属性时的写法
- redis下载地址
- poj3177--Redundant Paths(边的双连通)
- English--Computer System
- [转载]陕西安康宁陕县特产(一)
- 手风琴效果(超简单实用)