public class Test4 {
public static void main(String[] args) {
/**固定线程池:线程池中的线程是固定数量*/
// ExecutorService threadPool = Executors.newFixedThreadPool(3);
/**缓存线程池,线程池中的线程数量不定,随任务数量的变化来动态修改池中的线程数*/
// ExecutorService threadPool = Executors.newCachedThreadPool();
/**单线程池:线程池中只有一个线程,并且保证会有一个,如果池中的线程死亡了就又会生成一个。提交的任务都会被执行?*/
ExecutorService threadPool = Executors.newSingleThreadExecutor();
for (int i=0; i<10; i++){
final int task = i;
threadPool.execute(new Runnable() {
@Override
public void run() {
for (int i=0; i<10; i++){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + i + ":task" + task);
}
}
});
}
System.out.println("the end...");
//关闭线程池
threadPool.shutdown(); //等待线程执行完后结束
// threadPool.shutdownNow(); //不管线程是否执行完任务都结束
/**定时器线程池:1-在固定的时间之后执行一个任务。2-在固定的时间之后执行一个任务,然后每隔一段时间又执行一次任务*/
Executors.newScheduledThreadPool(3).schedule(
new Runnable() {
@Override
public void run() {
System.out.println("定时器到时。");
}
},
6,
TimeUnit.SECONDS);
}
}
多线程学习记录2-java5的一些线程池
最新推荐文章于 2024-03-27 14:44:09 发布