设为首页 加入收藏

TOP

使用Java线程池执行任务
2014-11-23 18:58:55 来源: 作者: 【 】 浏览:36
Tags:使用 Java 线程 执行 任务

下面介绍一下使用ThreadPoolExecutor线程执行者来运行多线程任务。它将线程创建与任务运行分离开来。


package test;


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;


public class ThreadExecuteExample {
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; i++) {
service.execute(new Runnable() {

@Override
public void run() {
try {
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
service.shutdown();
try {
service.awaitTermination(Integer.MAX_VALUE, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


ExecutorService service = Executors.newFixedThreadPool(2);


通过Executors创建了一个拥有两个线程的ExecutorService对象。


for (int i = 0; i < 10; i++) {
service.execute(new Runnable() {

@Override
public void run() {
try {
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}


往ExecutorService中提交了10个runnable对象的实例。ExecutorService会使用内部的2个线程来逐个运行这10个runnable对象。


service.shutdown();


关闭执行者。因为ExecutorService利用了它内部的初始化好的线程去执行提交的多个runnable任务,所以这些线程被反复利用而不会消亡。如果不显示的调用shutdown()方法的话,ExecutorService内部的线程一直会存活下去,这样即使任务完成了,虚拟机也不会退出。调用shutdown()后就会通知ExecutorService运行完任务后销毁所有的线程。


shutdown是一个非阻塞的方法。


service.awaitTermination(Integer.MAX_VALUE, TimeUnit.DAYS);


在指定的时间内阻塞等待ExecutorService任务的完成。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java的join方法 下一篇C++中字符数组和字符串string

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: