精华内容
下载资源
问答
  • 有返回值的线程

    2019-01-24 16:43:32
    package ... import java.util.concurrent.*; import java.util.Date; import java.util.List; import java.util.ArrayList;... * 有返回值的线程 */ @SuppressWarnings("...
    package com.oceansoft.business.bookprize.controller;
    
    
    import java.util.concurrent.*;
    import java.util.Date;
    import java.util.List;
    import java.util.ArrayList;
    
    /**
     * 有返回值的线程
     */
    @SuppressWarnings("unchecked")
    public class Test {
        public static void main(String[] args) throws ExecutionException,
                InterruptedException {
            System.out.println("----程序开始运行----");
            Date date1 = new Date();
    
            int taskSize = 5;
            // 创建一个线程池
            ExecutorService pool = Executors.newFixedThreadPool(taskSize);
            // 创建多个有返回值的任务
            List<Future> list = new ArrayList<Future>();
            for (int i = 0; i < taskSize; i++) {
                Callable c = new MyCallable(i + " ");
                // 执行任务并获取Future对象
                Future f = pool.submit(c);
                // System.out.println(">>>" + f.get().toString());
                list.add(f);
            }
            // 关闭线程池
            pool.shutdown();
    
            // 获取所有并发任务的运行结果
            for (Future f : list) {
                // 从Future对象上获取任务的返回值,并输出到控制台
                System.out.println(">>>" + f.get().toString());
            }
    
            Date date2 = new Date();
            System.out.println("----程序结束运行----,程序运行时间【"
                    + (date2.getTime() - date1.getTime()) + "毫秒】");
        }
    }
    
    class MyCallable implements Callable<Object> {
        private String taskNum;
    
        MyCallable(String taskNum) {
            this.taskNum = taskNum;
        }
    
        public Object call() throws Exception {
            System.out.println(">>>" + taskNum + "任务启动");
            Date dateTmp1 = new Date();
            Thread.sleep(1000);
            Date dateTmp2 = new Date();
            long time = dateTmp2.getTime() - dateTmp1.getTime();
            System.out.println(">>>" + taskNum + "任务终止");
            return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
        }
    }

     

    展开全文
  • * 有返回值的线程

    2018-09-26 16:22:18
    import java.util.concurrent.*; import java.util.Date; import java.util.List; import java.util....* 有返回值的线程  */ @SuppressWarnings("unchecked") public class Test { public s...

    import java.util.concurrent.*;  
    import java.util.Date;  
    import java.util.List;  
    import java.util.ArrayList;  
      
    /** 
    * 有返回值的线程 
    */  
    @SuppressWarnings("unchecked")  
    public class Test {  
    public static void main(String[] args) throws ExecutionException,  
        InterruptedException {  
       System.out.println("----程序开始运行----");  
       Date date1 = new Date();  
      
       int taskSize = 5;  
       // 创建一个线程池  
       ExecutorService pool = Executors.newFixedThreadPool(taskSize);  
       // 创建多个有返回值的任务  
       List<Future> list = new ArrayList<Future>();  
       for (int i = 0; i < taskSize; i++) {  
        Callable c = new MyCallable(i + " ");  
        // 执行任务并获取Future对象  
        Future f = pool.submit(c);  
        // System.out.println(">>>" + f.get().toString());  
        list.add(f);  
       }  
       // 关闭线程池  
       pool.shutdown();  
      
       // 获取所有并发任务的运行结果  
       for (Future f : list) {  
        // 从Future对象上获取任务的返回值,并输出到控制台  
        System.out.println(">>>" + f.get().toString());  
       }  
      
       Date date2 = new Date();  
       System.out.println("----程序结束运行----,程序运行时间【"  
         + (date2.getTime() - date1.getTime()) + "毫秒】");  
    }  
    }  
      
    class MyCallable implements Callable<Object> {  
    private String taskNum;  
      
    MyCallable(String taskNum) {  
       this.taskNum = taskNum;  
    }  
      
    public Object call() throws Exception {  
       System.out.println(">>>" + taskNum + "任务启动");  
       Date dateTmp1 = new Date();  
       Thread.sleep(1000);  
       Date dateTmp2 = new Date();  
       long time = dateTmp2.getTime() - dateTmp1.getTime();  
       System.out.println(">>>" + taskNum + "任务终止");  
       return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";  
    }  
    }

    展开全文
  • Callable实现带有返回值的线程

    我们都知道线程是没有返回值的,在Runnable接口中,只有一个抽象的Run方法,使用Callable我们能够实现带有返回值得的线程,下面是一个demo

    /**
     * 
     */
    package com.mingrisoft.threadone;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.FutureTask;
    
    public class Test {
    
           int value=100;//账户钱
        public static void main(String[] args) {
            // TODO Auto-generated method stub
        new Test();
        }
    
        public Test() {
    
            Thread thread=new Thread(new FutureTask<>(new run()));
            Thread thread2=new Thread(new FutureTask<>(new run1()));
            thread.start();
            thread2.start();
        }
    
    
        class run implements Callable<Integer>{
            @Override
            public Integer call() throws Exception {
                //在这里实现计算
    
                for(int i=0;i<10;i++){
                    value+=10;
                    System.out.println("run一的计算结果为:"+value);
                }
                return value;
            }
    
        }
    
        class run1 implements Callable<Integer>{
    
            @Override
            public Integer call() throws Exception {
                for(int i=0;i<10;i++){
                    value+=10;
                    System.out.println("run2一的计算结果为:"+value);
                }
                return value;
            }
        }
    
    }
    

    具体就不讲解喽,大家可以查看官方文档,现在我们来看看打印结果
    这里写图片描述

    我们发现同时运行,线程2居然被阻塞了,通过着我们发现可以通过这实现异步计算,
    上面我们创建了FutureTask对象,FutureTask实现了Runnable接口
    官方给出这样的说明
    可取消的异步计算。利用开始和取消计算的方法、查询计算是否完成的方法和获取计算结果的方法,此类提供了对 Future 的基本实现。仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。可使用 FutureTask 包装 Callable 或 Runnable 对象。因为 FutureTask 实现了 Runnable,所以可将 FutureTask 提交给 Executor 执行。
    那么说了,如果计算没有完成,就会阻塞get方法,先我们来测试一下
    修改程序的代码:

    /**
     * 
     */
    package com.mingrisoft.threadone;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    public class Test {
    
           int value=100;//账户钱
        public static void main(String[] args) {
            // TODO Auto-generated method stub
        new Test();
        }
    
        public Test() {
            FutureTask<Integer> future=new FutureTask<>(new run());
            FutureTask<Integer> future1=new FutureTask<>(new run1());
            Thread thread=new Thread(future);
            Thread thread2=new Thread(future1);
            thread.start();
            thread2.start();
    
                try {
                    int i=future.get();
                    int j=future1.get();
                    System.out.println("i的计算结果为:"+i);
                    System.out.println("j的计算的结果为:"+j);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
        }
    
    
        class run implements Callable<Integer>{
            @Override
            public Integer call() throws Exception {
                //在这里实现计算
    
                for(int i=0;i<10;i++){
                    value+=10;
                //  System.out.println("run一的计算结果为:"+value);
                }
                return value;
            }
    
        }
    
        class run1 implements Callable<Integer>{
    
            @Override
            public Integer call() throws Exception {
                for(int i=0;i<10;i++){
                    value+=10;
                //  System.out.println("run2一的计算结果为:"+value);
                }
                return value;
            }
        }
    
    }
    

    这里写图片描述

    展开全文
  • 今天碰到一个问题,从用线程从管道...依赖性的在网上查了一下,果然是有简单的解决方法的,Java1.5开始,有一种有返回值的线程。  Callable是一个功能性的接口,类似于Runnable,然而,Runnable,不返回结果并不能抛

      今天碰到一个问题,从用线程从管道流中获取数据,获取数据用来干嘛?当然是有用处,要不然获取它来干嘛。但是不想在线程中处理数据,代码整洁性不高。那么问题来了,怎么在另一个类中获取当前类的线程中的数据呢?依赖性的在网上查了一下,果然是有简单的解决方法的,Java1.5开始,有一种有返回值的线程。

      Callable是一个功能性的接口,类似于Runnable,然而,Runnable,不返回结果并不能抛出异常。Callable是返回结果的一个任务,并可能抛出异常。

      别的话不多说,咱来看看这玩意儿怎么实现的。

    class Test implements Callable {
        PipedInputStream pinputStream=null;
        PreparedStatement ps=null;
        public List<Bidr> list=null;
        public Test(PipedInputStream pinputStream,PreparedStatement ps) {
            this.pinputStream=pinputStream;
            this.ps=ps;
        }
        @Override
        public List<Bidr> call() throws Exception {
            ObjectInputStream inputStream = null;
            try {
                inputStream = new ObjectInputStream(pinputStream);
                list=(List<Bidr>) inputStream.readObject();
    
            } catch (IOException | ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return list;
        }
    }
    那么我们在另一个类中怎么获取这个list呢?

    其实很简单,代码如下:

    list=new Test(inputStream,ps).call();


    展开全文
  • 有返回值的线程定义需继承Callable接口,然后将线程交给执行器,提交线程需要使用submit()方法。 demo 示例: 使用线程执行器处理有返回值的线程 某驾校有4辆考试车,有8个学生要进行考试,要求分别获取学生...
  • Java多线程-新特性-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。 现在Java终于有可返回值的任务(也可以叫做线程)了...
  • Java线程:新特征-有返回值的线程   在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。   现在Java终于有可返回值的任务(也可以叫做...
  • Java线程:新特征-有返回值的线程   在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。   现在Java终于有可返回值的任务(也...
  • Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。 现在Java终于有可返回值的任务(也可以叫做线程)了。...
  • 有返回值的线程怎么实现? 在Java线程开发中,有几种方法开启线程?假如需要得到线程返回的信息怎么办?可以实现吗?凯哥将通过源码和大家一起分享下线程怎么将返回值带回来的。 一:无返回值类型的 1:继承...
  • 有返回值的线程】 1、可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。 2、执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,828
精华内容 1,531
关键字:

有返回值的线程