1700450529
1700450530
}
1700450531
1700450532
//直接由结束态转变为运行态
1700450533
1700450534
t.start();
1700450535
1700450536
}
1700450537
1700450538
此段程序运行时会报IllegalThreadStateException异常,原因就是不能从结束状态直接转变为可运行状态,我们知道一个线程的运行时间分为三部分:T1为线程启动时间,T2为线程体的运行时间,T3为线程销毁时间,如果一个线程不能被重复使用,每次创建一个线程都需要经过启动、运行、销毁这三个过程,那么这势必会增大系统的响应时间,有没有更好的办法降低线程的运行时间呢?
1700450539
1700450540
T2是无法避免的,只有通过优化代码来实现降低运行时间。T1和T2都可以通过线程池(Thread Pool)来缩减时间,比如在容器(或系统)启动时,创建足够多的线程,当容器(或系统)需要时直接从线程池中获得线程,运算出结果,再把线程返回到线程池中—ExecutorService就是实现了线程池的执行器,我们来看一个示例代码:
1700450541
1700450542
public static void main(String[]args){
1700450543
1700450544
//2个线程的线程池
1700450545
1700450546
ExecutorService es=Executors.newFixedThreadPool(2);
1700450547
1700450548
//多次执行线程体
1700450549
1700450550
for(int i=0;i<4;i++){
1700450551
1700450552
es.submit(new Runnable(){
1700450553
1700450554
public void run(){
1700450555
1700450556
System.out.println(Thread.currentThread().getName());
1700450557
1700450558
}
1700450559
1700450560
});
1700450561
1700450562
}
1700450563
1700450564
//关闭执行器
1700450565
1700450566
es.shutdown();
1700450567
1700450568
}
1700450569
1700450570
此段代码首先创建了一个包含两个线程的线程池,然后在线程池中多次运行线程体,输出运行时的线程名称,结果如下:
1700450571
1700450572
pool-1-thread-1
1700450573
1700450574
pool-1-thread-2
1700450575
1700450576
pool-1-thread-1
1700450577
1700450578
pool-1-thread-2
[
上一页 ]
[ :1.700450529e+09 ]
[
下一页 ]