首页 > 编程语言 >java中的异步任务处理和Feature接口

java中的异步任务处理和Feature接口

时间:2023-11-17 14:02:11浏览次数:33  
标签:doSomethingElse 异步 java Feature System 任务 println out

简介

Java并发包提供了一套框架,大大简化了执行异步任务所需要的开发。框架引入了“执行服务”的概念,封装了任务执行的细节,对任务提交者而言,他可以关注任务本身,如提交任务、获取结果、取消任务。而不用关注任务执行的细节。

基本接口

①Runnable和Callable: 表示要执行的任务

②Excecutor和ExecutorService: 表示执行服务

③Future: 表示异步执行的结果

示例

import java.util.concurrent.*;


// ①要执行的异步任务
class Task implements Callable<Double> {
    @Override
    public Double call() {
        //以异步方式在新的线程中执行耗时的操作
        try {
            System.out.println("doSomeLongComputation start");
            Thread.sleep(3000);
            System.out.println("doSomeLongComputation end");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return 1.0;
    }
}

public class MyTestFeature {
    void doSomethingElse() {
        try {
            System.out.println("doSomethingElse start");
            Thread.sleep(1000);
            System.out.println("doSomethingElse end");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    public void testFeature() {
        //②执行服务
        ExecutorService executor = Executors.newCachedThreadPool();
        //③异步任务结果
        Future<Double> futureRate = executor.submit(new Task());

        //异步操作进行的同时你可以做其他的事情
        doSomethingElse();

        try {
            //获取异步操作的结果,如果最终被阻塞,无法得到结果,那么在最多等待5秒钟之后退出
            Double result = futureRate.get(5, TimeUnit.SECONDS);
            System.out.println("Result->" + result);
        } catch (ExecutionException e) {
            // 计算抛出一个异常
            e.printStackTrace();
        } catch (InterruptedException ie) { // 当前线程在等待过程中被中断
            System.out.println("InterruptedException");
        } catch (TimeoutException te) { // 在Future对象完成之前超过已过期
            System.out.println("TimeoutException");
        }
        executor.shutdown();
    }

    public static void main(String[] args) {
        MyTestFeature case1 = new MyTestFeature();
        case1.testFeature();
    }
}

执行

doSomethingElse start
doSomeLongComputation start
doSomethingElse end
doSomeLongComputation end
Result->1.0

说明

①有两个关闭方法:shutdown和shutdownNow。区别:shutdown不再接受新任务,但已经提交的任务(即使未开始)会继续执行;shutdownNow不仅不接受新任务,且会终止已提交但未执行的任务。

②例子中如果executor不关闭,主线程结束后,还得等子线程等待很长时间结束

 

标签:doSomethingElse,异步,java,Feature,System,任务,println,out
From: https://blog.51cto.com/u_15758999/8442289

相关文章

  • javascript postMessage给子页面发消息
    发送消息页面<!DOCTYPEhtml><html><head><title>demo</title><metacharset="utf-8"/><script>varchildwinconstchildname="popup"functionopenChild(){......
  • java如何做大体积的文件上传和下载
    在Java中,实现大体积文件的上传和下载涉及到处理文件的分片、并发上传、断点续传等问题。本文将详细介绍如何通过Java实现大体积文件的上传和下载。1.文件上传文件上传是将本地文件上传到服务器的过程。对于大体积文件的上传,我们可以将文件分成多个小片段进行并发上传。1.1文件分......
  • 【Java基础】Java中switch的多种写法
    Java中switch的多种写法代码需求:键盘录入一个数字(代表星期几),判断是工作日还是休息日switch最基础写法 publicstaticvoidswitchTest(){while(true){System.out.println("请输入:");Scannersc=newScanner(System.in);......
  • Java IO --- select,poll,epoll
    一、select、poll、epollselect、poll、epoll都是IO多路复用的机制且本质上都是同步I/O。IO多路复用就是通过一种机制,可以同时监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知进行相应的读写操作。1.1selectintselect(intn,fd_set*readfds,fd_set*writefd......
  • 通过Java实现文件断点续传功能
    用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用户从上传断线的地方继续传送,这样大大减少了用户的烦恼。本文将用Java语言实现断点续传,需要的可以参考一下什么是断点续传用户上传大文件,网络差点的需要历时数小时,万......
  • Java -day2
    三流程控制3.1scannerpsvm newScanner(System.in) alt+enter+enter  自动补全 Scannerscanner=newScanner(System.in);   3.2if3.3switch3.4while3.5for ......
  • 「Java开发指南」如何在Spring中使用JAX-WS注释器?
    本文将指导您如何使用JAX-WS注释器从Spring服务生成JAX-WSWeb服务,在本教程中,您将学习如何:为Spring服务启用JAX-WS部署应用程序并测试服务所有与Springscaffolding相关的任务都需要MyEclipseSpring或Bling授权。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:7423369......
  • Java 业务开发常见错误 100 例(二)
    HTTP调用:超时、重试、并发需要考虑的三点:首先,框架设置的默认超时是否合理;其次,考虑到网络的不稳定,超时后的请求重试是一个不错的选择,但需要考虑服务端接口的幂等性设计是否允许我们重试;最后,需要考虑框架是否会像浏览器那样限制并发连接数,以免在服务并发很大的情况下,HTTP调用......
  • Java设计模式之组合模式
    在某些情况下,我们需要处理一组对象,这些对象之间具有整体-部分的关系,我们希望能够以一致的方式处理单个对象和对象组合,而不需要对它们进行特殊处理。组合模式的解决方案是将对象组合成树状结构,其中树的节点可以是单个对象或对象组合。这样无论是操作单个对象还是对象组合,都可以使用......
  • java智慧校园信息管理系统源码
    一、智慧校园的定义智慧校园指的是以云计算和物联网为基础的智慧化的校园工作、学习和生活一体化环境。以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合,让校园实现无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到......