打字猴:1.700450489e+09
1700450489
1700450490 执行时,“#”会依次递增,表示系统正在运算,为用户提供了运算进度。此类异步计算的好处是:
1700450491
1700450492 尽可能多地占用系统资源,提供快速运算。
1700450493
1700450494 可以监控线程执行的情况,比如是否执行完毕、是否有返回值、是否有异常等。
1700450495
1700450496 可以为用户提供更好的支持,比如例子中的运算进度等。
1700450497
1700450498
1700450499
1700450500
1700450501 编写高质量代码:改善Java程序的151个建议 [:1700438200]
1700450502 编写高质量代码:改善Java程序的151个建议 建议125:优先选择线程池
1700450503
1700450504 在Java 1.5之前,实现多线程编程比较麻烦,需要自己启动线程,并关注同步资源,防止出现线程死锁等问题,在1.5版之后引入了并行计算框架,大大简化了多线程开发。我们知道一个线程有五个状态:新建状态(New)、可运行状态(Runnable,也叫做运行状态)、阻塞状态(Blocked)、等待状态(Waiting)、结束状态(Terminated),线程的状态只能由新建转变为了运行态后才可能被阻塞或等待,最后终结,不可能产生本末倒置的情况,比如想把一个结束状态的线程转变为新建状态,则会出现异常,例如如下代码会抛出异常:
1700450505
1700450506 public static void main(String[]args)throws Exception{
1700450507
1700450508 //创建一个线程,新建状态
1700450509
1700450510 Thread t=new Thread(new Runnable(){
1700450511
1700450512 public void run(){
1700450513
1700450514 System.out.println(“线程在运行……”);
1700450515
1700450516 }
1700450517
1700450518 });
1700450519
1700450520 //运行状态
1700450521
1700450522 t.start();
1700450523
1700450524 //是否是运行态,若不是则等待10毫秒
1700450525
1700450526 while(!t.getState().equals(Thread.State.TERMINATED)){
1700450527
1700450528 TimeUnit.MILLISECONDS.sleep(10);
1700450529
1700450530 }
1700450531
1700450532 //直接由结束态转变为运行态
1700450533
1700450534 t.start();
1700450535
1700450536 }
1700450537
1700450538 此段程序运行时会报IllegalThreadStateException异常,原因就是不能从结束状态直接转变为可运行状态,我们知道一个线程的运行时间分为三部分:T1为线程启动时间,T2为线程体的运行时间,T3为线程销毁时间,如果一个线程不能被重复使用,每次创建一个线程都需要经过启动、运行、销毁这三个过程,那么这势必会增大系统的响应时间,有没有更好的办法降低线程的运行时间呢?
[ 上一页 ]  [ :1.700450489e+09 ]  [ 下一页 ]