打字猴:1.700450429e+09
1700450429
1700450430 private int seedMoney;
1700450431
1700450432 //接收主线程提供的参数
1700450433
1700450434 public TaxCalculator(int_seedMoney){
1700450435
1700450436 seedMoney=_seedMoney;
1700450437
1700450438 }
1700450439
1700450440 @Override
1700450441
1700450442 public Integer call()throws Exception{
1700450443
1700450444 //复杂计算,运行一次需要10秒
1700450445
1700450446 TimeUnit.MILLISECONDS.sleep(10000);
1700450447
1700450448 return seedMoney/10;
1700450449
1700450450 }
1700450451
1700450452 }
1700450453
1700450454 这里模拟了一个复杂运算:税款计算器,该运算可能要花费10秒钟的时间,此时不能让用户一直等着吧,需要给用户输出点什么,让用户知道系统还在运行,这也是系统友好性的体现:用户输入即有输出,若耗时较长,则显示运算进度。如果我们直接计算,就只有一个main线程,是不可能有友好提示的,如果税金不计算完毕,也不会执行后续动作,所以此时最好的办法就是重启一个线程来运算,让main线程做进度提示,代码如下:
1700450455
1700450456 public static void main(String[]args)throws Exception{
1700450457
1700450458 //生成一个单线程的异步执行器
1700450459
1700450460 ExecutorService es=Executors.newSingleThreadExecutor();
1700450461
1700450462 //线程执行后的期望值
1700450463
1700450464 Future<Integer>future=es.submit(new TaxCalculator(100));
1700450465
1700450466 while(!future.isDone()){
1700450467
1700450468 //还没有运算完成,等待200毫秒
1700450469
1700450470 TimeUnit.MILLISECONDS.sleep(200);
1700450471
1700450472 //输出进度符号
1700450473
1700450474 System.out.print(”#”);
1700450475
1700450476 }
1700450477
1700450478 System.out.println(”\n计算完成,税金是:”+future.get()+“元”);
[ 上一页 ]  [ :1.700450429e+09 ]  [ 下一页 ]