一直用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()));

}
  

java线程的方便调用方式的更多相关文章

  1. Java线程池的使用方式,核心运行原理、以及注意事项

    为什么需要线程池 java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的系统时间,影响系统效率. 为了解决上面的问题,java中引入了线程池,可以使创 ...

  2. 并发编程系列:Java线程池的使用方式,核心运行原理、以及注意事项

    并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 线程池的缘由 java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的 ...

  3. Java线程的三种方式

    创建线程有三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future创建线程 三种方式详解如下: ---------------------------- ...

  4. Java线程的实现/创建方式

    1.继承Thread类: Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例. 启动线程的唯一方法就是通过 Thread 类的 start()实例方法. start( ...

  5. java 线程三种实现方式

    1继承thread public class MultiThread1 extends Thread{ public void run(){ for(int i=0; i<7; i++){ Sy ...

  6. java 线程池的创建方式

    package com.nf147.Constroller; import java.util.concurrent.ExecutorService; import java.util.concurr ...

  7. Java内部接口的调用方式

    package com.hs.review; public class Person { public static void main(String[] args) { Person p1 = ne ...

  8. Java线程的概念

    1.      计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...

  9. 基于 JVMTI 实现 Java 线程的监控(转)

    随着多核 CPU 的日益普及,越来越多的 Java 应用程序使用多线程并行计算来充分发挥整个系统的性能.多线程的使用也给应用程序开发人员带来了巨大的挑战,不正确地使用多线程可能造成线程死锁或资源竞争, ...

随机推荐

  1. JAVA之G1与CMS垃圾回收

    G1 GC,全称Garbage-FirstGarbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相信 ...

  2. golang中遍历汇总

    直接上例子: 例子1: package main import( "fmt" ) func main(){ a := map[string]string{ "alice& ...

  3. Linux系统Docker配置阿里云镜像加速器

    vim /etc/docker/daemon.json # 替换为 "registry-mirrors": ["https://v2ltjwbg.mirror.aliyu ...

  4. Celery分布式队列学习

    1. celery介绍和使用 Celery 是一个 基于python开发的分布式异步消息任务队列(可以简单理解为python多进程或多线程中的queue),通过它可以轻松的实现任务的异步处理.cele ...

  5. easyUI之window窗口

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. Ajax案例-基于HTML,以GET或POST方式,检查注册用户名是否在数据库中已存在

    08_register.jsp <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTY ...

  7. weight权重的属性

    权重是把屏幕剩余空间按比例分配 控件使用0dp,则实际的宽度比就等于权重比 控件wrap_content,那么权重越大,位置占的越多,再小不过wrap_content 控件match_parent,那 ...

  8. 004-tomcat优化-Catalina中JVM优化、Connector优化、NIO化

    一.服务端web层 涉及内容Nginx.Varnish.JVM.Web服务器[Tomcat.Web应用开发(Filter.spring mvc.css.js.jsp)] 1.1.基本优化思路 1.尽量 ...

  9. React Native初始化项目后执行react-native run-ios,构建失败

    今天是肿么了......一上班创建React Native项目,react-native run-ios运行就报错,运行不了...呜呜...... 一开始以为自己react-native run-io ...

  10. playbook常用操作

    playbook常用操作 1.检查playbook语法错误 ansible-playbook -i hosts deploy_coredns.yaml --syntax-check 2.查看playb ...