public class Core {
public static void main(String[] args){
ExecutorService pool = Executors.newFixedThreadPool(1);
//创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Thread t3 = new MyThread();
Thread t4 = new MyThread();
Thread t5 = new MyThread();
//将线程放入池中进行执行
pool.execute(t1);
pool.execute(t2);
pool.execute(t3);
pool.execute(t4);
pool.execute(t5);
//关闭线程池
pool.shutdown();
}
}class MyThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"正在执行");
}
}
为什么打印的结果是pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行
线程池的大小是1,那么线程1执行完成了后,就应该执行别的线程了呀,为什么线程1会打印5遍呢
public static void main(String[] args){
ExecutorService pool = Executors.newFixedThreadPool(1);
//创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Thread t3 = new MyThread();
Thread t4 = new MyThread();
Thread t5 = new MyThread();
//将线程放入池中进行执行
pool.execute(t1);
pool.execute(t2);
pool.execute(t3);
pool.execute(t4);
pool.execute(t5);
//关闭线程池
pool.shutdown();
}
}class MyThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"正在执行");
}
}
为什么打印的结果是pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行
线程池的大小是1,那么线程1执行完成了后,就应该执行别的线程了呀,为什么线程1会打印5遍呢
这句决定了打印结果
线程池中只有一个线程,所以一直是1
这个1和线程名没关系,是线程池中线程编号
改为2、3试试,就会发现了这个问题了~
如果要看的仔细一点 你可以在RUN 里面加SLEEP~
建议楼主发布时将代码放入[code]标签中。
在你输入的时候,上面有一排快捷方式。点击#那个东西可以选择语言的。
并没有并发的情况,pool-1-thread-1的个数是线程的并发数。
线程池pool是工厂,这个工厂里面只有一个干活的工人,工人就是线程池里面的工作线程。
pool.execute(t1);
从工厂里面把唯一的那个工人拿出来执行任务。
此时的t1是一个任务。