package com.dy.pool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 在Executors类里面提供了一些静态工厂,生成一些常用的线程池。
* 1. newSingleThreadExecutor
* 创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。
* 如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。
* 此线程池保证所有任务的执行顺序按照任务的提交顺序执行
*/
public class SingleThreadExecutor {
public static void main(String[] args) {
System.out.println("欢迎来到线程世界!");
//创建一个可重用固定线程数的线程池
ExecutorService pool = Executors.newSingleThreadExecutor();
//创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口
SingleThreadExecutor.MyThread t1 = new SingleThreadExecutor().new MyThread("实例t1");
SingleThreadExecutor.MyThread t2 = new SingleThreadExecutor().new MyThread("实例t2");
SingleThreadExecutor.MyThread t3 = new SingleThreadExecutor().new MyThread("实例t3");
SingleThreadExecutor.MyThread t4 = new SingleThreadExecutor().new MyThread("实例t4");
//将线程放入池中进行执行
pool.execute(t1);
pool.execute(t2);
pool.execute(t3);
pool.execute(t4);
//关闭线程池
pool.shutdown();
}
class MyThread extends Thread {
public MyThread(String name){
super(name);
}
@Override
public void run() {
System.out.println(this.getName() + "正在执行。。。");
System.out.println(Thread.currentThread().getName() + "正在执行。。。");
}
}
}
另外说下 代码中的this.getName和Thread.currentThread().getName():
前者的this是指实例对象自身,后者是指实例对象中的当前执行线程;二者不要理解混淆了!