1.前言。
如题。ExecutorService可用在并发创建rar包,并发多线程执行同一任务中
2.例子。
public void testCall() throws Exception{
//声明一个类,可以被调用,类似于线程,但它可以拥有返回值
class MyCall implements Callable<String>{
private int seq;
public MyCall(int seq){
this.seq=seq;
}
//抛出异常并可以拥有返回值
public String call() throws Exception {
System.err.println("执行"+seq+","+Thread.currentThread().getName());
Thread.sleep(3000);
System.err.println("Weak up "+seq);
return "完成"+seq;//这是返回值
}
}
ExecutorService es = Executors.newCachedThreadPool();//创建线程池对象
List<Future<String>> result =new ArrayList<Future<String>>();//放结果用的集合
for(int i=0;i<3;i++){
Future<String> f=es.submit(new MyCall(i));//线程执行完成以后可以通过引用获取返回值
result.add(f);
}
for(Future<String> f:result){
System.err.println("返回值:"+f.get());//输出返回的值
}
System.err.println("完成....");
}
3.需要注意的。
(1)Executors的多线程是不分先后的,Callable类似Thread,是扩展的线程的意思,虚拟机上面Executors创建的线程是可以看到的。
(2)callable比run好是因为可以有返回值和抛出异常。
(3)可以减少代码量,同类型多线程操作不需要再用信号量来互相通知,操作完可以用return通知。
分享到:
相关推荐
Java并发编程中的ExecutorService、Callable和Future Java并发编程中,ExecutorService、Callable和Future是三大核心组件,它们之间紧密相连,共同实现了高效、安全的并发编程。下面我们将详细介绍这些组件的作用和...
- **创建线程**:有两种主要方式,一是继承`Thread`类,重写`run()`方法,然后创建对象调用`start()`;二是实现`Runnable`接口,同样重写`run()`方法,然后将实现类的实例传入`Thread`构造函数,通过`Thread`启动。...
### Java多线程-JDK5.0新增线程创建方式 #### 一、新增方式1:实现Callable接口 ##### (1)介绍 自Java 5.0起,为提高线程管理的灵活性与效率,引入了`Callable`接口,这是一种全新的创建线程的方式。与传统的`...
JDK 5.0 是用 Java 语言创建高可伸缩的并发... <br>本教程将介绍 JDK 5.0 提供的用于并发的新实用程序类,并通过与现有并发原语(synchronized、wait() 和 notify())相比较,说明这些类如何提高了可伸缩性。
- **创建线程方式**:有两种主要方式创建线程,一是继承`Thread`类,重写`run()`方法,然后实例化并调用`start()`;二是实现`Runnable`接口,同样重写`run()`,然后创建`Thread`对象并将其传递给构造函数,通过`...
在JDK 1.5之前,Java主要依赖于Thread类来创建和管理线程,但这种方式存在一定的局限性,如线程同步问题、资源管理不善等。JDK 1.5引入了`java.util.concurrent`包,提供了许多高级并发工具,如`ExecutorService`、`...
这些并发新特性使得在 JDK 1.5 中编写多线程程序变得更加简单和高效,减少了锁竞争,提高了并发性能,并降低了死锁和数据不一致的风险。通过熟练掌握这些工具,开发者可以更好地应对复杂的并发场景,构建健壮的并发...
Java提供了两种主要的方法来创建线程,分别是直接继承自`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景。 1. **继承Thread类**: 当你选择继承`Thread`类时,你需要创建一个新的类,该类直接...
- **JDK1.5线程并发库**:引入了更高级的并发控制机制,如`ExecutorService`、`Callable`、`Future`等,提供了更安全、更高效的多线程解决方案,减少了线程同步和死锁的风险。 ##### 2. 创建线程的两种传统方式 - ...
最常用和实用的JDK内存和线程监控指令,堆栈监控指令及操作步骤
并发编程+多线程+反射+泛型+集合+密码加密+数据结构+正则匹配+注解java系统操作+JDK版本控制+JMM内存模型+服务器+进制+限流算法并发编程+多线程+反射+泛型+集合+密码加密+数据结构+正则匹配+注解java系统操作+JDK...
例如,ExecutorService和Future接口提供了异步执行任务的能力,而ConcurrentHashMap则是一种线程安全的高效哈希表。 除此之外,JDK 5对Java语言的一些底层机制进行了优化,比如在内存模型(Memory Model)上进行了...
在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: - 当你定义一个类继承自Thread类时,你需要重写`run()`方法,这个方法包含了线程执行的具体逻辑。 - 创建Thread子类...
总结,JDK21的虚拟线程是一种革命性的并发处理技术,它通过协程实现了轻量级线程,降低了并发编程的复杂性,提高了程序的执行效率,尤其是在IO密集型任务中展现出巨大的潜力。开发者应了解其工作原理和特性,以便在...
在现代软件开发中,多线程并发技术是提高程序性能和响应速度的关键因素之一。随着计算机硬件的性能持续提升,程序也必须能够有效地利用多核处理器来实现真正的并行处理。JVM(Java虚拟机)作为Java应用程序的运行...
在Java中创建线程有两种传统方式,一种是通过继承Thread类并覆盖其run方法来创建线程;另一种是通过传递实现了Runnable接口的对象给Thread类的构造函数来创建线程。在两种方式中,run方法的调用最终都会调用到Thread...
Java中实现线程的三种方式包括继承Thread类、实现Runnable接口以及实现Callable接口。书中还特别提及了线程池的创建和管理,以及通过ThreadPoolExecutor类的源码分析,揭示线程池的工作原理。 在**基础案例篇**,...
3. **使用ExecutorService和Callable接口**:JDK 1.5引入的Executor框架允许更高级别的线程管理。Callable接口与Runnable类似,但可以返回结果。使用ExecutorService可以创建线程池,有效管理线程生命周期,提高性能...
7. **内建的并发工具类**:JDK 5.0引入了`java.util.concurrent`包,包含了许多线程安全的数据结构和并发工具,如`ExecutorService`、`Semaphore`、`Future`等,极大地简化了多线程编程。 8. **NIO.2(New I/O API...