zoukankan      html  css  js  c++  java
  • java callable future futuretask

    Runnbale封装一个异步运行的任务,可以把它想象成一个没有任何参数和返回值的异步方法。Callable和Runnable相似,但是它有返回值。Callable接口是参数化的类型,只有一个方法call

    public interface Callable<V> {

        V call() throws Exception;

    }

    类型参数就是返回值的类型,例如:Callable<String>表示最终返回一个String的异步操作(计算)

    Runnbale封装一个异步运行的任务,可以把它想象成一个没有任何参数和返回值的异步方法。Callable和Runnable相似,但是它有返回值。Callable接口是参数化的类型,只有一个方法call()

    public interface Callable<V> {

        V call() throws Exception;

    }

    类型参数就是返回值的类型,例如:Callable<String>表示最终返回一个String的异步操作(计算)

        //求素数 
        class PrimeCallable implements Callable<int[]> { 
            private int max; 
             
            public PrimeCallable(int max) { 
                this.max = max; 
            } 
             
            @Override 
            public int[] call() throws Exception { 
                List<Integer> result = new ArrayList<Integer>(); 
                for(int i = 2; i <= max; i++) { 
                    System.out.println("System is checking data " + i); 
                    if(isPrime(i)) { 
                        result.add(i); 
                    } 
                } 
                 
                Integer[] iters = result.toArray(new Integer[]{}); 
                int[] array = new int[iters.length]; 
                int i = 0; 
                for(Integer iter : iters) { 
                    array[i++] = iter; 
                } 
                return array; 
            } 
             
            private boolean isPrime(int data) { 
                try { 
                    Thread.sleep(5); 
                } catch (InterruptedException e) { 
                    e.printStackTrace(); 
                } 
                for(int i = 2; i < ((int)Math.sqrt(data)+1); i++) { 
                    if(data % i == 0)  
                        return false; 
                } 
                return true; 
            } 
        } 
        Callable<int[]> primeCallable = new PrimeCallable(1000); 
                FutureTask<int[]> ftask = new FutureTask<int[]>(primeCallable); 
                 
                Thread t = new Thread(ftask); 
                t.start(); 
                 
                int[] result = null; 
                System.out.println("Waiting for result....."); 
                try { 
                    result = ftask.get(); 
                } catch (InterruptedException e) { 
                    e.printStackTrace(); 
                } catch (ExecutionException e) { 
                    e.printStackTrace(); 
                } 
                 
                for(int i = 0; result != null && i < result.length; i++) { 
                    if(i != 0 && i % 10 == 0) { 
                        System.out.println(); 
                    } 
                    System.out.print(String.format("%1$-5s", result[i])); 
                } 
    执行结果: 
    Waiting for result..... 
    System is checking data 2 
    System is checking data 3 
    System is checking data 4 
    System is checking data 5 
    System is checking data 6 
    System is checking data 7 
    .................................. 
    System is checking data 999 
    System is checking data 1000 
    2    3    5    7    11   13   17   19   23   29    
    31   37   41   43   47   53   59   61   67   71    
    73   79   83   89   97   101  103  107  109  113   
    127  131  137  139  149  151  157  163  167  173   
    179  181  191  193  197  199  211  223  227  229   
    233  239  241  251  257  263  269  271  277  281   
    283  293  307  311  313  317  331  337  347  349   
    353  359  367  373  379  383  389  397  401  409   
    419  421  431  433  439  443  449  457  461  463   
    467  479  487  491  499  503  509  521  523  541   
    547  557  563  569  571  577  587  593  599  601   
    607  613  617  619  631  641  643  647  653  659   
    661  673  677  683  691  701  709  719  727  733   
    739  743  751  757  761  769  773  787  797  809   
    811  821  823  827  829  839  853  857  859  863   
    877  881  883  887  907  911  919  929  937  941   
    947  953  967  971  977  983  991  997  
  • 相关阅读:
    va_start、va_end、va_list的使用
    UNIX环境高级编程 apue.h头文件的配置
    Ant编译android程序
    Shell编程中Shift的用法
    命令生成和运行android项目
    ubuntu rar文件解压中文乱码问题
    SQLite区分大小写查询
    java命令执行jar包的方式
    ubuntu下安装与卸载软件方法
    linux下查看最后登陆的用户的信息
  • 原文地址:https://www.cnblogs.com/google4y/p/3509356.html
Copyright © 2011-2022 走看看