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

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

时间:2023-10-08 20:23:07浏览次数:39  
标签:doSomethingElse 异步 java System Feature 任务 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

说明

 

 

参考

https://blog.csdn.net/wangdong5678999/article/details/81837387

标签:doSomethingElse,异步,java,System,Feature,任务,println,out
From: https://www.cnblogs.com/kaituorensheng/p/17748231.html

相关文章

  • java学习
    ......
  • JavaScript实现大文件分片上传处理
    很多时候我们在处理文件上传时,如视频文件,小则几十M,大则1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1、文件过大,超出服务端的请求大小限制;2、请求时间过长,请求超时;3、传输中断,必须重新上传导致前功尽弃这些问题很影响用户的体验感,所以下面介绍一种基于原生JavaScript进......
  • java开发浏览器(含代码示例)
    Java开发浏览器的步骤如下:创建一个Java类,它将实现浏览器的功能。Java开发浏览器的步骤如下:1.创建一个Java类,它将实现浏览器的功能。2.使用JavaSwing框架来创建浏览器的界面,包括菜单栏、工具栏、地址栏和显示网页的窗口。3.使用Java的URL类来处理网址,并使用Java的HttpURLConnect......
  • java中的mysql优化
    Java中的MySQL优化有许多方面可以考虑,以下是一些常见的优化技巧:使用索引:为频繁进行查询的列创建索引,可以大大提高查询效率。但是需要注意不要过度索引,否则可能会降低写操作的性能。优化SQL查询语句:合理编写SQL语句,避免不必要的复杂查询。可以使用EXPLAIN语句来分析查询执行计划,找出......
  • 【JAVA】数独游戏
    StartpublicclassSudokuGame{publicstaticvoidmain(String[]args){SudokuGeneratorgenerator=newSudokuGenerator();int[][]borad=generator.generate();Sudokusudoku=newSudoku(borad);sudoku.printf();......
  • java泛型笔记(根据青空的霞光)
    问题:有些数据的他的类型是不固定的,比如成绩:可以是数字,也可以是字符串(比如优良),那么要存储这样的数据要用什么数据类型可以使用object类型来解决这个问题,但是我们无法判断对方传进来的到底是什么类型,如果既不是数字也不是字符串,我们也无法得知。如果想要将object类再转换回数......
  • 异步爬虫实战:实际应用asyncio和aiohttp库构建异步爬虫
    在网络爬虫的开发中,异步爬虫已经成为一种非常流行的技术。它能够充分利用计算机的资源,提高爬虫效率,并且能够处理大量的运算请求。Python中的asyncio和aiohttp库提供了强大的异步爬虫支持,使得开发者能够轻松构建高效的异步爬虫。什么是异动爬虫?为什么要使用自动爬虫?异步爬虫是一......
  • Java时间类型总结
    1.为什么需要新的时间类型1.8之后为什么需要LocalDate、LocalTime、LocalDateTime因为之前原生的Date如果不格式化,那么打印出来的日期可视化差,例如下面TueSep1009:34:04CST2019你会说使用SimpleDateFormat()方法,如下所示。publicclassFormatDateTime{publicst......
  • Java设计模式之享元模式
    1.1.概述定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。 1.2.结构享元(Flyweight)模式中存在以下两种状态:1.内部状态,即不会随着环境的改变而改变的可......
  • Java 应用启动脚本
    启动代码java-server-Xms4g-Xmx4g-Xss256k-XX:NewSize=512m-XX:MaxNewSize=512m-XX:+UseG1GC-XX:InitiatingHeapOccupancyPercent=40-XX:G1HeapRegionSize=8m-XX:+ExplicitGCInvokesConcurrent-XX:ParallelGCThreads=4-Dsun.rmi.dgc.server.gcInterval=36000000-Ds......