一直用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. chrome获取xpath元素-f12工具

    Chrome浏览器获取XPATH的方法----通过开发者工具获取 引用源:https://blog.csdn.net/li6727975/article/details/46126079   版权声明 ...

  2. js优先队列的定义和使用

    //队列,先入先出,FIFO function Queue() { this.items = []; } Queue.prototype = { constructor: Queue, enqueue ...

  3. 1.Json的学习--JSON.stringfy()

    1.JSON.parse() JSON.parse() JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScr ...

  4. Android跨进程通信Messenger

    一.概述 我们可以在客户端发送一个Message给服务端,在服务端的handler中会接收到客户端的消息,然后进行对应的处理,处理完成后,再将结果等数据封装成Message,发送给客户端,客户端的ha ...

  5. Redis调试 Centos

    https://zhuanlan.zhihu.com/p/67205845 https://www.cxc233.com/blog/e1d54234.html

  6. Android:JNA实践(附Demo)

    一.JNA和JNI的对比   1.JNI的调用流程 Android应用开发中要实现Java和C,C++层交互时,想必首先想到的是JNI,但是JNI的使用过程十分繁琐,需要自己再封装一层JNI接口进行转 ...

  7. ftp服务器不能上传文件故障

    1.在客户端lftp命令无法put文件 原因:登陆用户无法读写 ftp服务器的文件夹,在服务器上增加权限  chmod 777  即可 还有一种方法:在 vsftp的配置文件里,设置可匿名读写

  8. 如何快速通过json构建javabean对象(Intellij IDEA-->GsonFormat使用教程)

    和第三方对接的时候,返回给我们的json时参数字段多是很常见的现象,所以我们手动去创建javabean肯定是要花费不少时间,博主在网上找到了很多种,可用通过json自动生成javabean的工具,这里 ...

  9. Vim的强大配置文件

    我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2.自动插入文件头 ,新建C.C++源文件时自动插入表 ...

  10. MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

    转 http://blog.csdn.net/hsd2012/article/details/51112009 转 http://blog.csdn.net/e421083458/article/de ...