-------
android培训、
java培训、期待与您交流! ----------
public class ExecutorsDemo {
/**
* executors线程池的使用练习
* Executors是一个线程池。我们不用看名字
* 它是一个工具类。工具类往往都是以s结尾。
* 它里面存储的全部都是静态方法。
* 静态方法标志都是以s开头。
* FixedThreadPool 固定大小的线程池
*
*
* SingleThreadExecutor 单线程池:这里面只有一个线程
* 等效于:
* FixedThreadPool(1)
*
* newCachedThreadPool():
* 我们测试的时候使用了shoutdownnow
* 在上面的SingleThreadExecutor和FixedTrheadPool(1)
* 的情况下,任务执行一次之后就停止了。
* 而我们发现使用了这个任务不会停止下来。
* 我们分析出:
* 这个线程在消亡的时候,它找了一个接班人。然后让他接着执行任务。
* 所以我们看到我们传递给线程池的任务是全部都执行完了
*
*/
public static void main(String[] args) {
//创建一个线程池
// ExecutorService pool=Executors.newFixedThreadPool(3); //创建一个固定大小的线程池
// ExecutorService pool=Executors.newFixedThreadPool(1); //创建一个固定大小的线程池
// ExecutorService pool=Executors.newSingleThreadExecutor();
ExecutorService pool=Executors.newCachedThreadPool();
//往线程池中添加一个任务
//有的人在问,为什么我们写程序的时候总是写new Thread(new Runanble(){public void run(){}});
//因为我们是把线程要执行的任务进行了封装,而封装线程执行的任务的对象就是Runnable
//因为这种做法最接近面向对象。所以我们就使用这种。我们其实是使用Thread这个类调用了Runnable
//这个对象去执行线程所要执行的任务
//往线程池中添加3个任务。每个任务打印5遍信息。
for(int j=1;j<=3;j++){
//像for循环条件的局部变量我们是不可以定义成final的因为我们后面也要++
//我们可以另外定义一个局部变量做成final,把循环条件的变量赋值给它
final int task=j;
pool.execute(new Runnable() {
public void run() {
for(int i=1;i<=5;i++){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
":is running "+i+" ,loop of "+task);
}
}
});
/**
* pool-1-thread-1:is running 1 ,loop of 1
pool-1-thread-1:is running 2 ,loop of 1
pool-1-thread-1:is running 3 ,loop of 1
pool-1-thread-1:is running 4 ,loop of 1
pool-1-thread-1:is running 5 ,loop of 1
pool-1-thread-3:is running 1 ,loop of 3
pool-1-thread-3:is running 2 ,loop of 3
pool-1-thread-3:is running 3 ,loop of 3
pool-1-thread-3:is running 4 ,loop of 3
pool-1-thread-3:is running 5 ,loop of 3
pool-1-thread-2:is running 1 ,loop of 2
pool-1-thread-2:is running 2 ,loop of 2
pool-1-thread-2:is running 3 ,loop of 2
pool-1-thread-2:is running 4 ,loop of 2
pool-1-thread-2:is running 5 ,loop of 2
*/
}
// 我们可以在线程执行完任务之后把线程给停止掉
pool.shutdown();
// pool.shutdownNow(); //是立刻让线程停止掉
}
}