Java线程池的应用实例分析
本文实例讲述了Java线程池的应用。分享给大家供大家参考,具体如下:
一使用Future与Callable来计算斐波那契数列
1代码
importjava.util.concurrent.*; publicclassFutureCallableDemo { staticlongfibonacci(longn) { if(n==1||n==2) return1; else returnfibonacci(n-1)+fibonacci(n-2); } publicstaticvoidmain(String[]args)throwsException { Callabletask=()->fibonacci(30); ExecutorServiceexecutor=Executors.newFixedThreadPool(1); Future future=executor.submit(task); System.out.println("计算第10个斐波那契级数,过会来取..."); while(future.isDone()==false) { System.out.println("忙别的去吧,结果还在计算中..."); } System.out.printf("计算完毕,第10个斐波那契级数是:%d%n",future.get()); } }
2运行
计算第10个斐波那契级数,过会来取...
忙别的去吧,结果还在计算中...
忙别的去吧,结果还在计算中...
忙别的去吧,结果还在计算中...
忙别的去吧,结果还在计算中...
忙别的去吧,结果还在计算中...
......
忙别的去吧,结果还在计算中...
计算完毕,第10个斐波那契级数是:832040
二线程池模拟工人做工
1代码
importjava.util.concurrent.Executors; importjava.util.concurrent.ThreadPoolExecutor; importjava.util.concurrent.TimeUnit; classTaskimplementsRunnable { privateStringname; publicTask(Stringname) { this.name=name; } publicStringgetName(){ returnname; } @Override publicvoidrun() { try { Longduration=(long)(Math.random()*100); System.out.println("正在做工中,执行者:"+name); TimeUnit.SECONDS.sleep(duration); } catch(InterruptedExceptione) { e.printStackTrace(); } } } publicclassBasicThreadPoolExecutorExample { publicstaticvoidmain(String[]args) { ThreadPoolExecutorexecutor=(ThreadPoolExecutor)Executors.newCachedThreadPool(); for(inti=0;i<=5;i++) { Tasktask=newTask("Task"+i); System.out.println("新任务添加成功:"+task.getName()); executor.execute(task); } executor.shutdown(); } }
2运行
新任务添加成功:Task0
新任务添加成功:Task1
新任务添加成功:Task2
新任务添加成功:Task3
新任务添加成功:Task4
新任务添加成功:Task5
正在做工中,执行者:Task0
正在做工中,执行者:Task3
正在做工中,执行者:Task1
正在做工中,执行者:Task2
正在做工中,执行者:Task4
正在做工中,执行者:Task5
Processfinishedwithexitcode0
更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。