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()));
}
java线程的方便调用方式的更多相关文章
- Java线程池的使用方式,核心运行原理、以及注意事项
为什么需要线程池 java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的系统时间,影响系统效率. 为了解决上面的问题,java中引入了线程池,可以使创 ...
- 并发编程系列:Java线程池的使用方式,核心运行原理、以及注意事项
并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 线程池的缘由 java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的 ...
- Java线程的三种方式
创建线程有三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future创建线程 三种方式详解如下: ---------------------------- ...
- Java线程的实现/创建方式
1.继承Thread类: Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例. 启动线程的唯一方法就是通过 Thread 类的 start()实例方法. start( ...
- java 线程三种实现方式
1继承thread public class MultiThread1 extends Thread{ public void run(){ for(int i=0; i<7; i++){ Sy ...
- java 线程池的创建方式
package com.nf147.Constroller; import java.util.concurrent.ExecutorService; import java.util.concurr ...
- Java内部接口的调用方式
package com.hs.review; public class Person { public static void main(String[] args) { Person p1 = ne ...
- Java线程的概念
1. 计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...
- 基于 JVMTI 实现 Java 线程的监控(转)
随着多核 CPU 的日益普及,越来越多的 Java 应用程序使用多线程并行计算来充分发挥整个系统的性能.多线程的使用也给应用程序开发人员带来了巨大的挑战,不正确地使用多线程可能造成线程死锁或资源竞争, ...
随机推荐
- Content:"\2715",特殊字符和图标
原文 项目中用到的一些特殊字符和图标 html代码 <div class="cross"></div> css代码 1 2 3 4 5 6 7 8 9 10 ...
- ARP输入 之 arp_process
概述 arp_process为ARP输入包的核心处理流程: 若输入为ARP请求且查路由成功,则进行如下判断:输入到本地,则进行应答:否则,允许转发,则转发,本文代码不包含转发流程: 若输入为ARP应答 ...
- Nginx之进程间的通信机制(共享内存、原子操作)
1. 概述 Linux 提供了多种进程间传递消息的方式,如共享内存.套接字.管道.消息队列.信号等,而 Nginx 框架使用了 3 种传递消息的传递方式:共享内存.套接字.信号. 在进程间访问共享资源 ...
- Qt 单元测试
使用Qtcreator 自带的单元测试工具框架QTestlib进行测试. 一.创建一个单元测试程序 new project->other project ->Qt unit test ...
- LC 934. Shortest Bridge
In a given 2D binary array A, there are two islands. (An island is a 4-directionally connected grou ...
- python之NLP数据清洗
1.知识点 """ 安装模块:bs4 nltk gensim nltk:处理英文 1.安装 2.nltk.download() 下载相应的模块 英文数据处理: 1.去掉h ...
- 配置了configuration.xml之后提示找不到映射关系
在启动类里面单独增加一个Bean即可解决 @Bean public DatabaseIdProvider getDatabaseIdProvider(){ DatabaseIdProvider dat ...
- Oracle 对某张表中的某一列进行取余,将结果集分为多个集合
比如分为 5个集合,那么就用某一列和5 取余 ,分别可以取 余数为 0.1.2.3.4 的结果集,那么就把集合分为5个小的集合了 1.取余数为 0 的集合 select * from (select ...
- grep 正则表达式用引号括起来和元字符加反斜杠转义的测试
grep 正则表达式用引号括起来和元字符加反斜杠转义的测试 实验在 grep 命令中的表达式:不加引号,加单引号,加双引号的区别,以及部分元字符前加与不加 `\’ 进行转义的区别.实验环境为“实验楼( ...
- LVS系列二、LVS集群-DR模式
一. LVS-DR和LVS-IP TUN集群概述 1. Direct Routing(直接路由) Director分配请求到不同的real server.real server处理请求后直接回应给用 ...