1.线程池:
熟悉web的童鞋一定很熟悉连接池 连接池中存放的是Connection 而线程池存放的是Thread... 为何要引入线程池或者是连接池呢?货物疑问是为了提高效率
线程池的例子:
int main(){
//创建线程池
ExecutorService threadPools = Executors.newFixedThreadPool(3);
for(int i=1;i<11;i++){//模拟任务 12
final int task = i;
threadPools.execute(new Runnable() {
public void run() {
for(int j = 0 ;j<4;j++){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" do times of "+j+"+ :task of .."+task);//匿名内部类使用变量必须是final修饰的
}
}
});
}
System.out.println("all task committed");
}
//创建缓存线程池
Executors.newCachedThreadPool();
//创建单一线程...(//如何实现线程死掉后重启?)
Executors.newSingleThreadExecutor();
2.用线程池启动定时器
定时器之一...某个时间点后执行任务
Executors.newScheduledThreadPool(3).schedule(new Runnable() {
public void run() {
System.out.println("boombing。。。");
}
}, 10, TimeUnit.SECONDS);
上述代码 实现了再某个时间后执行一项任务
定时器之二 ...某个点后执行任务 之后每隔多久都要执行.连环炸弹的实现显得格外简单
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("fuck you");
}
}, 20, 2,TimeUnit.SECONDS);