ExecutorService的execute和submit方法

深入理解ExecutorService的execute和submit方法 ExecutorService是Java并发API中的核心组件之一,它提供了一种将任务提交和执行的机制,从而简化了多线程编程。通过ExecutorService,开发者可以将任务的创建和执行过程解耦,提高程序的模块性和可维护性。// 创建一个固定大小的线程池在上述代码中,我们使用Executors类的方法创建了一个包含四个工作线程的线程池。这样的线程池适用于处理固定数量的并发任务。 阅读详情

/*这个是今天question 1的两个例子*/
/*题目;The first example uses a threads to execute 4 instances of the
 * Runnable interface T1.Task T1 is implemented as an implementation of the Runnable
 * interface and the code is contained in the run method .In this simple example the task
 * is to print a number 10 times on the screen followed  by a newline. The array of class
 * Future is used to hold references to each task submitted to the pool of thread.In this
 * case 4 jobs are going to be submitted and ,hence,the array has size 4.Once the jobs
 * are submitted we want main() to wait for all the tasks in the threadpool to complete.
 * This is done by invoking get on each job submitted.Then the pool is shut down.   */

import java.util.concurrent.*;
class ThreadPool1 {
 public static void main(String arg[]){
  ExecutorService pool;
  pool=Executors.newFixedThreadPool(2);
  Runnable r;
  Future f[]=new Future[4];
  for(int j=0;j<4;j++){
   r=new T1(j);
   f[j]=pool.submit(r);
  }
  /*下面一段代码是question1的下半截用到的*/
  try{
   for(Future x: f)x.get();
  }
  catch(InterruptedException e){}
  catch(ExecutionException e){}
  pool.shutdown();
  System.out.println("Main finished");
 }
}
class T1 implements Runnable{
 int k;
 public T1(int kk){
  k=kk;
 }
 public void run(){
  for(int j=0;j<10;j++);
  System.out.println();
 }
}

===================================解决方案========================================================

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ExecutorServiceTest {
 /*
  * 因为之前一直用的execute方法,最近有个情况需要 用到submit方法,
  */

 /*
  * 接收的参数不一样 submit有返回值,而execute没有
  *
  * Method submit extends base method Executor. execute by creating and
  * returning a Future that can be used to cancel execution and/or wait for
  * completion.
  *
  * 用到返回值的例子,比如说我有很多个做validation的task,我希望所有的task执行完,
  * 然后每个task告诉我它的执行结果,是成功还是失败,如果是失败. 原因是什么: 然后我就可以把所有失败的原因综合起来发给调用者。
  *
  *
  * 个人觉得cancel executio这个用处不大,很少有需要去取消执行的。
  *
  * 3,submit方便Exception处理 意思就是如果你在你的task里会抛出checked或者unchecked
  * exception,而你又希望 外面的调用者能够感知这些exception并做出及时的处理,那么就需要用到submit,通过
  * 捕获Future.get抛出的异常。
  *
  *
  */
 public static void main(String[] args) {
  ExecutorService executorService = Executors.newCachedThreadPool();

  List<Future<String>> resultList = new ArrayList<Future<String>>();
  // 创建10个任务并执行
  for (int i = 0; i < 4; i++) {
   // 使用ExecutorService执行Callable类型的任务,并将结果保存在future变量中
   Future<String> future = (Future<String>) executorService
     .submit(new Task(i));
   // 将任务执行结果存储到List中
   resultList.add(future);
  }
 
//  1、shutdown方法:这个方法会平滑地关闭ExecutorService,当我们调用这个方法时,
//  ExecutorService停止接受任何新的任务且等待已经提交的任务执行完成(已经提交的任
//  务会分两类:一类是已经在执行的,另一类是还没有开始执行的),当所有已经
//  提交的任务执行完毕后将会关闭ExecutorService。这里我们先不举例在下面举例
  
  
  // 遍历任务的结果
  for (Future<String> fs : resultList) {
   try {
    // 打印各个线程(任务)执行的结果
    System.out.println(fs.get());
   } catch (InterruptedException e) {
    e.printStackTrace();
   } catch (ExecutionException e) {
    e.printStackTrace();
    return;
   }
  }
  
  executorService.shutdown();
 }

}

class Task implements Runnable {
 private int id;

 public Task(int id) {
  this.id = id;
 }
 /*
  * 任务的具体过程,一旦任务传递ExecutorService 的 submit方法,
  * 则该方法自动在一个线程上执行。
  */
 public void run() {
  System.out.println("run()方法被自动调用,干活!!!"+Thread.currentThread().getName());
  for (int i = 0; i < 10; i++) {
   System.out.println(
     ""+id+"   "+Thread.currentThread().getName()
   );
  }

 }
}

 

 

C语言从句柄到对象 (一) —— 全局变量的噩梦与“多实例”的救赎 本文探讨了嵌入式开发中句柄(Handle)的概念与应用。通过电机控制案例,分析了传统单例模式在扩展性上的局限,并展示了如何通过句柄实现代码复用:将电机状态封装为结构体,通过指针(句柄)传递实例数据,使同一套逻辑可操作多个实例。文章比较了单例模式与句柄模式的适用场景,建议底层驱动库默认采用句柄模式以提高扩展性。最后指出当前实现仍存在数据暴露风险,预告下期将介绍不透明指针技术实现更安全的封装。全文揭示了句柄作为C语言实现模块化和面向对象设计的关键作用。 阅读详情

相关推荐

深入解析AndroidManifest.xml与device_admin.xml:打造完美DeviceOwner应用配置

本文深入解析了Android企业级开发中DeviceOwner应用的核心配置文件AndroidManifest.xml与device_admin.xml。详细阐述了如何精准声明DeviceAdminReceiver、定义管理策略,并提供了通过ADB命令进行设置与验证的实战指南,帮助开发者构建权限完整、配置正确的设备所有者应用。

ice55的博客 682

Netty源码分析:ChannelFuture与Future底层解析

继承关系 io.netty.channel.ChannelFuture extendsio.netty.util.concurrent.Futureextendsjava.util.concurrent.Future

保暖透气大裤衩LeoLee的博客 1368

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 457

ExecutorService线程池submit的使用

有关线程池ExecutorService,只谈submit的使用 可创建的类型如下: private static ExecutorService pool = Executors.newFixedThreadPool(20);//创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 private static ExecutorService pool1 = Executo...

weixin_30547797的博客 437

SPAD IMX479规格_分辨率

当然IMX479具备IMX459几乎全部的数字架构,但也有一个缺点就是贵,这个让头部的主机厂有些犹豫,毕竟大家都在集中火力想把车载LiDAR玩进千元机。如果用一片IMX479是不太可能实现千元内部的,当然国产也在奋起直追,特别在前面的几家SPAD厂商都具备开发IMX479的实力,但相对来说落地可能更是当下所考虑的,IMX479的迭代是基于IMX459,小编已经注意到国内有一两家已经在挑战479的规格了,如果国产SPAD没有大规模量产就直接流片IMX479的规格,可能就有点忽略市场的反馈闭环。

致力于lidar应用开发 2418

解决微信小程序长页面滚动到底部点击底部的输入框后输入框漂浮且页面滚动到顶部

一、问题描述 项目中有一个长页面上部展示部分信息下部为信息录入,页面长度为三屏幕(不同手机屏幕大小略有差异),当滚动到第二屏或者第三屏去填写信息时点击输入框后输入框漂浮起来了并且页面向上滚动了一段距离,回到了第一屏中展示的内容。效果如图。 滚动到第二屏,证件号输入。 点击输入框 可以看到证件号输入框漂浮了起来并且页面滚动到了第一屏展示的内容。 注意:小程序是2018年上线,在2020年4月份之前该页面从未出现过这种现象。推测:微信的后续更新中对微信小程序基础库进行了重构,导致点击输入框后页

仰望星空的代码 3261

线程池ExecutorService的submit和execute

在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过 Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特 性。   一、创建任务   任务就是一个实现了Runnable接口的类。 创建的时候实run方法即可。   二、

victory08的专栏 3469

vue3 - 详细实现用户收货地址识别解析“姓名/手机号/省市区/街道/乡镇村庄“关键字,用户复制粘贴一段含有姓名电话/详细地址的文字文本信息,vue3自动识别拆分并填入到对应表单字段中,详细示例代码

vue3,nuxt3,快递地址读取,收货地址解析、快递地址解析、物流地址解析自动识别,收货地址解析,从发货地址中拆出姓名电话地址,根据粘贴的字符串提取姓名地址,vue3地址信息自动识别,ts,vue3智能识别地址,提取姓名电话地址信息,自动识别出省市区街道姓名手机号等,根据文本自动解析出收货信息,怎么识别文本中的手机号,粘贴板地址识别,地址智能识别,如何识别收货地址中的关键字,粘贴一段文字后,自动识别到姓名/手机号/收货地址,vue3仿淘宝地址智能识别解析实现,省市区街道智能解析,vue3收货地址,识别地址

✅ 精选推荐文章 5503

Java/ExecutorService中多线程服务ExecuteService的使用

ExecutorService 是 Java 中的一个接口,它扩展了 Executor 接口,并提供了更多的方法来处理多线程任务。它是 Java 中用于执行多线程任务的框架之一,可以创建一个线程池,将多个任务提交到线程池中执行。ExecutorService 接口提供了许多方法,如 shutdown()、shutdownNow()、submit()、execute()、invokeAll() 等,可以更方便地提交任务、执行任务、关闭线程池等操作。

★【World Of Moshow 郑锴】★ 4458

GEE APP:基于GEE的红树林监测平台

本文将介绍如何利用Google Earth Engine平台,结合Landsat系列卫星影像和SRTM高程数据,实现红树林分布的动态监测与变化分析。

此星光明博客 160

PC 端微信页面拆分及 JavaFx 使用

一、前言 对于一个知识点的学习过程来说,往往使用自己熟悉的工具或方式才更易于上手。因为所有同类型的知识点在抛出复杂的流程拨云见日后,所能得到的几乎都是同样的设计思想和实现理论。 在 Java 语言桌面版开发中,直至目前共提供了三套 UI 开发方式;Awt、Swing、JavaFx,以及一些扩展组件 SWT 等。在这三套 UI 组件中,JavaFx 是最新也是最为好用的,因为他提供了丰富的功能,以及...

bugstack虫洞栈 3615

java8 函数式接口作为传参,传参可以使用方法代替

java8 函数式接口作为传参,参数可以使用方法代替 示例: public class TestFunctionalInterface { @Test public void testSubmit() { ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.submit(new Runnable() { ...

u010181847的专栏 3806

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ExecutorService 的 execute 和 submit 方法的用法及区别

【代码】ExecutorService 的 execute 和 submit 方法的用法及区别。

younuoqianjin的博客 1558

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ExecutorService的execute和submit方法的区别

因为之前一直是用的execute方法,最近有个情况需要用到submit方法,所以研究了下。 三个区别: 1、接收的参数不一样 2、submit有返回值,而execute没有 Method submit extends base method Executor.execute by creating and returning a Future that can

Android移动开发者的专栏 1594

0007 ExecutorService的execute和submit方法【基础】

因为之前一直是用的execute方法,最近有个情况需要用到submit方法,所以研究了下。 三个区别: 1、接收的参数不一样 2、submit有返回值,而execute没有 Method submit extends base method Executor.execute by creating and returning a Future that can be used to

junlinbo的专栏 805

ExecutorService 接口execute 方法和 submit 方法有什么区别

方法提交了一个不需要返回结果的任务,然后使用。方法提交了一个需要返回结果的任务,并获取了。最后,我们关闭了线程池。下面是一个简单的示例,展示了。在这个例子中,我们首先使用。以下回答来自智谱清言。

m0_58466443的博客 922

关于ExecutorService中的execute()和submit()方法的区别

java多线程

yzj479622672的博客 1722

ExecutorService的submit和execute方法

execute方法和submit方法的三个区别: 1、接收的参数不一样 2、submit有返回值,而execute没有 Method submit extends base method Executor.execute by creating and returning a Future that can be used to cancel execution and/or wait fo

courage89的专栏 1396

java submit execute_ExecutorService的submit和execute方法 | 學步園

execute方法和submit方法的三個區別:1、接收的參數不一樣2、submit有返回值,而execute沒有Method submit extends base method Executor.execute by creating and returning a Future that can be used to cancel execution and/or wait for comp...

weixin_39962675的博客 151
上一篇: 深入理解BodyTagSupport,包括SKIP_PAGE, EVAL_PAGE
下一篇: JDBC连接数据库
linuxMinx
博客等级 码龄15年 195粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值