zoukankan      html  css  js  c++  java
  • JAVA 多线程 Callable 与 FutureTask:有返回值的多线程

    java多线程中,如果需要有返回值,就需要实现Callable接口。

    看例子:

    先建立一个Dowork这个类,就是平时某个业务的实现

    package com.ming.thread.one;
    
    import java.util.concurrent.Callable;
    
    /**
     * 
     * 定义一个具体做事情work
     * 线程运行完成后返回一个Stirng
     * @author ming
     *
     */
    public class Dowork implements Callable<String> {
    
        private int i=10;
        
        @Override
        public String call() throws Exception {
            while(i>0){
                System.out.println("i am work......"+i);
                i--;
                Thread.sleep(1000);
            }
            return "我做完了这次工作哦...";
        }
    
        
    }

    然后在我的测试类中,你可以看到要建立一个FutureTask这个任务调度,最后通过它可以获取线程执行的返回值.

    package com.ming.thread.one;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    /**
     * 测试dowork的线程 
     * @author ming
     *
     */
    public class TestDowork {
    
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            Dowork dowork=new Dowork();
            FutureTask<String> futureTask=new FutureTask<>(dowork);//新建一个检查dowork的线程任务
            new Thread(futureTask).start();
            while(!futureTask.isDone()){
                System.out.println("检查工作释放做完...");
                Thread.sleep(100);
            }
            String s=futureTask.get();
            System.out.println("获取追后返回值哦..."+s);
        }
    }

    ok,ok,ok。。。

  • 相关阅读:
    关于CoreData的使用
    【转】向iOS开发者介绍C++(-)
    Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
    【转】Object-C 多线程中锁的使用-NSLock
    写了半天的返回
    oracle 锁表问题
    LINQ的基本认识
    Oracle客户端配置
    REVERSE
    vchar2和nvchar2
  • 原文地址:https://www.cnblogs.com/huzi007/p/7053318.html
Copyright © 2011-2022 走看看