Java并发编程举例Runnable, Callable, Future, FutureTask, CompletionService

import java.util.concurrent.*;

/**
 * Created by chenh on 2017/3/23.
 */
public class ConcurrentDemo {

    // 没有返回值
    //public interface Runnable
    public class RunnableTask implements Runnable{

        public void run() {
            System.out.println("run");
        }
    }

    //有返回值
    //public interface Callable<V>
    public class CallableTask implements Callable<String> {

        public String call() throws Exception {
            System.out.println("call");
            return "call";
        }
    }

    public void testRunnableTask(){
        ExecutorService executorService = Executors.newCachedThreadPool();
        //public interface Future<V>
        Future<?> future = executorService.submit(new RunnableTask());
        try {
            System.out.println("testRunnableTask: " + future.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        executorService.shutdown();

        //new Thread(new RunnableTask()).start()
    }

    public void testCallableTask()
    {
        ExecutorService executorService = Executors.newCachedThreadPool();
        Future<?> future = executorService.submit(new CallableTask());
        try {
            System.out.println("testCallableTask: " + future.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        executorService.shutdown();

    }

    public void testFutureTask1(){
        ExecutorService executorService = Executors.newCachedThreadPool();
        //public interface RunnableFuture<V> extends Runnable, Future<V>
        //public class FutureTask<V> implements RunnableFuture<V>

        FutureTask<String> futureTask = new FutureTask<String>(new RunnableTask(), "result");
        Future<?> future = executorService.submit(futureTask);
        try {
            System.out.println("testFutureTask: " + future.get());
            System.out.println("testFutureTask: " + futureTask.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        executorService.shutdown();
    }

    public void testFutureTask2(){
        ExecutorService executorService = Executors.newCachedThreadPool();
        //public interface RunnableFuture<V> extends Runnable, Future<V>
        //public class FutureTask<V> implements RunnableFuture<V>

        FutureTask<String> futureTask = new FutureTask<String>(new CallableTask());
        Future<?> future = executorService.submit(futureTask);
        try {
            System.out.println("testFutureTask: " + future.get());
            System.out.println("testFutureTask: " + futureTask.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        executorService.shutdown();
    }

    public class CallableTask2 implements Callable<Integer>{
        int id;

        public CallableTask2(int id){
            this.id = id;
        }

        public Integer call() throws Exception {
            return id;
        }
    }
    public void testCompletionService(){
        ExecutorService executorService = Executors.newCachedThreadPool();
        //public class ExecutorCompletionService<V> implements CompletionService<V>
        CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(executorService);
        for (int i=0; i<10; i++)
        {
            completionService.submit(new CallableTask2(i));
        }
        for (int i=0; i<10; i++)
        {
            try {
                System.out.println(completionService.take().get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
        executorService.shutdown();
    }


    public static void main(String[] args){

        ConcurrentDemo demo = new ConcurrentDemo();
        demo.testRunnableTask();
        demo.testCallableTask();
        demo.testFutureTask1();
        demo.testFutureTask2();
        demo.testCompletionService();
    }
}


运行效果

run
testRunnableTask: null
call
testCallableTask: call
run
testFutureTask: null
testFutureTask: result
call
testFutureTask: null
testFutureTask: call
0
1
4
5
2
7
8
3
6
9


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值