Java基于Callable实现多线程和线程池

1.多线程

Callable 接口有返回值 Runnable 接口没有返回值
所以Callable接口实现的多线程或线程池可以判断每个线程的执行结果
是否符合预期

多线程实现
匿名内部类 实现接口、继承Thread类也可以实现

for (int i = 0;i<10;i++) {

	 FutureTask 对象接收Callable对象为参数
	 
     FutureTask<String> ft=new FutureTask<>(new Callable<String>() {
         int money = 10;
         @Override
         public String call() throws Exception {
             String result;
             while(money>0) {
                 System.out.println("钱还剩余:"+money);
                 money--;
             }
             result= "钱已用光";
             return result;
         }
     });
     new Thread(ft).start();    Thread对象接收FutureTask对象为参数,开启子线程 
     String result = ft.get();  获取每一个子线程的执行结果
     System.out.println(result);
 }

输出为10个循环  钱还剩余  钱已用光
多线程的实现有三种:继承Thread、实现Runnable接口、实现Callable接口或Future

2.线程池

ExecutorService service = Executors.newFixedThreadPool(1000);
定义线程池
for (int i=0;i<1000;i++) {
	 
	 使用submit方法执行子线程可以获得每个线程的执行结果,
	 execute方法也会执行子线程却无法获得执行结果
	 
     Future<String> future = service.submit(new Callable<String>() {
         @Override
         public String call() throws Exception {
             return "say helloWorld!!!";
         }
     });
     if (future.get().equals("s")) {
         System.out.println("no");
     }
     else if (future.get().equals("say helloWorld!!!")) {
         System.out.println("ok");
     }
     else {
         System.out.println("no");
     }
 }
 
 service.shutdown();
 service.awaitTermination(Long.MAX_VALUE,TimeUnit.SECONDS);

输出为 1000个ok
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值