zoukankan      html  css  js  c++  java
  • java线程的方便调用方式

    一直用java的线程,总感觉写起来阅读或书写起来不是方便,改进之。

     

    实现类:

    public class Task<R> {

    private ExecutorService executorService = Executors.newCachedThreadPool();
    Future<R> future;
    private Supplier<R> fuc;

    public boolean cannel() {
    return future.cancel(true);
    }

    public Task(Supplier<R> fuc) {
    this.fuc = fuc;
    }

    class InnerTask implements Callable<R> {
    @Override
    public R call() {
    return fuc.get();
    }
    }

    public void start() {
    this.future = executorService.submit(new InnerTask());
    executorService.shutdown();
    }

    public R result() throws ExecutionException, InterruptedException {
    if (!future.isCancelled()) {
    return future.get();
    }
    throw new InterruptedException();
    }
    使用示例:

    //一个超时的计算
    public Integer sum(List<Integer> list) {
    Integer sum = 0;
    for (Integer integer : list) {
    sum += integer;
    }
    return sum;
    }

    public String getClassName() {
    return getClass().getName();
    }


    @Test
    public void testTask1() throws ExecutionException, InterruptedException {
    List<Integer> list = Arrays.asList(1, 2, 3);
    Task<Integer> task = new Task(() -> {
    Integer sum = 0;
    for (Integer integer : list) {
    sum += integer;
    }
    return sum;
    });
    task.start();
    //这里继续书写其它业务逻缉
    String className = getClassName();
    //计算结果
    System.out.println(className + "运行结果是:" + String.valueOf(task.result()));

    }


    @Test
    public void testTask2() throws ExecutionException, InterruptedException {
    List<Integer> l = Arrays.asList(1, 2, 3);
    Task<Integer> task = new Task(() -> {
    return new BIPayTest().sum(l);
    });
    task.start();
    //这里继续书写其它业务逻缉
    String className = getClassName();
    //计算结果
    System.out.println(className + "运行结果是:" + String.valueOf(task.result()));

    }
      

  • 相关阅读:
    Centos 7安装python3
    R贡献文件中文
    Sublime text 3 注册码激活码 版本号3143
    Create R NoteBook require updated versions of the following packages : knitr,rmarkdown.
    vim 的升级 安装 重装
    使用yum快速升级CentOS 6.5内核到 3.10.28
    Container With Most Water——LeetCode
    Majority Element II——LeetCode
    Summary Ranges —— LeetCode
    Contains Duplicate III —— LeetCode
  • 原文地址:https://www.cnblogs.com/laogu2/p/11189753.html
Copyright © 2011-2022 走看看