您的位置:首页 > 其它

线程池Executors

2015-11-25 12:56 141 查看
3个线程的线程池提交10个任务

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

public class ThreadPoolTest {

public static void main(String[] args) {
ExecutorService threadPool =Executors.newFixedThreadPool(3);
//ExecutorService threadPool =Executors.newCachedThreadPool();//池子里面的线程数动态变化
//ExecutorService threadPool =Executors.newSingleThreadExecutor();//单个线程池,线程死了会找个替补,保证线程不会挂掉
for(int i=1;i<=10;i++){
final int k=i;
threadPool.execute(new Runnable() {

@Override
public void run() {
for (int j=1;j<=10;j++){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" looping of "+j+" for task of "+k);
}

}
});
}
System.out.println("All of 1o tasks have committed");
threadPool.shutdown();//线程池必须关闭线程才能停止,任务干完了关闭
//threadPool.shutdownNow();//任务没干完也立即关闭

//定时器,调度线程池,10s后执行
Executors.newScheduledThreadPool(3).schedule(new Runnable() {

@Override
public void run() {

System.out.println("bombing!");

}
}, 10, TimeUnit.SECONDS);
//4s后开炸,然后每隔2s开炸
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {

@Override
public void run() {

System.out.println("bombing!");

}
}, 4,2, TimeUnit.SECONDS);

//变相绝对定时,无绝对时间定时

System.err.println(new Date().getTime()-System.currentTimeMillis());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程池