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);
Futurefuture=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。