需求:所有线程放入线程池中,只要有一个线程的发挥值为false,立即停止所有线程的运行,以及关闭线程池。 代码如下:
public static boolean test0() { final ThreadPoolExecutor exec = (ThreadPoolExecutor) Executors .newFixedThreadPool(5); CompletionService<Boolean> cs = new ExecutorCompletionService<Boolean>( exec); Callable<Boolean> call; Future<Boolean> task; int threadNum = 50; int successfulThreadNum = 0; for (int i = 0; i < 50; i++) { final int temp = i; call = new Callable<Boolean>() { public Boolean call() throws Exception { Thread.sleep(1000000 * (int) Math.random()); System.out.println("Call" + temp); //return (temp / 3 >=1 ? Boolean.FALSE : Boolean.TRUE); return true; } }; cs.submit(call); } while (true) { try { Boolean obj = cs.take().get(); System.out.println(obj); if (!obj) { exec.shutdownNow(); System.out.println("shut down now;"); return true; } if (obj) { successfulThreadNum++; } if (successfulThreadNum >= 30) { exec.shutdown(); return true; } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 请大神指出缺陷或者错误之处。。。。。
相关推荐
1. 创建Callable接口的实现类,并实现call()方法,该call()方法将作为该线程的执行体,且该call()方法有返回值,再创建Callable的实例。从Java 8开始,可以直接使用Lamda表达式创建Callable对象。 2. 使用...
大家都知道实现多线程的2种方式,今天来讲讲Future实现具有返回值的线程。应用场景:前端调用时无需等待线程结束返回,线程结束后需进行其它操作如更新状态、通知kafuka等。
除了`Callable`和`Future`,还可以使用`Runnable`配合`ExecutorService`和`Future`来实现有返回值的线程。首先创建一个实现了`Runnable`的类,然后在内部创建一个`Future`对象,通过`ExecutorService`提交任务并获取...
总结一下,`Runnable`用于无返回值的简单任务,`Callable`用于有返回值的任务,`Future`作为结果的容器,而`FutureTask`则将两者结合,使得`Callable`的任务可以通过`ExecutorService`执行。在实际开发中,根据需求...
Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...
Java多线程Callable和Future接口的使用场景非常广泛,如计算复杂的数学问题、处理大规模数据、实现高性能的服务器等等。在这些场景中,我们可以使用Callable和Future接口来实现异步计算,从而提高系统的性能和可扩展...
在这个例子中,我们定义了一个`MyCallableClass`类实现`Callable`接口,并根据`flag`的值返回不同的结果或抛出异常。主函数中,我们创建了一个固定大小的线程池,然后提交了三个`Callable`任务,并通过`Future`对象...
Callable接口和Future接口的组合使用,能够实现多线程并发执行任务,并获取执行结果。 一、Callable接口简介 Callable接口是一个泛型接口,用于表示可以调用并返回结果的代码。它提供了一个call()方法,该方法...
我们使用Callable与Future来实现异步编程,将原本需要21次数据库访问的接口改造成10个线程并发访问数据库,极大地缩短了响应时间。 结论 Callable与Future是Java并发编程中两个非常重要的概念,它们通常结合使用来...
`Callable`和`Future`的组合是Java并发包中一个强大的工具,它弥补了`Runnable`接口的不足,使得异步编程可以获取到返回值并处理异常。同时,`ExecutorService`作为线程池的实现,为并发编程提供了一种优雅的解决...
Java并发编程中,ExecutorService、Callable和Future是三大核心组件,它们之间紧密相连,共同实现了高效、安全的并发编程。下面我们将详细介绍这些组件的作用和实现原理。 ExecutorService ------------- ...
1. **任务调度**:在高并发环境下,通过Callable和Future可以实现任务的异步处理,比如在Servlet容器中,可以创建一个线程池,将耗时的操作提交到线程池,然后返回Future对象给客户端,客户端可以依据Future检查任务...
总结,Java中的Callable接口提供了比Runnable更强大的功能,允许我们在线程中执行有返回值的任务。通过结合ExecutorService和Future,我们可以方便地管理这些任务的执行,获取结果并处理可能出现的异常。熟练掌握...
在Java编程中,多线程是并发处理任务的关键机制,Callable接口和FutureTask类是Java提供的用于创建具有返回值的线程的重要工具。本文将详细解释Callable接口的使用、适配器模式在创建线程中的应用,以及FutureTask在...
然后,创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 Future Task 对象封装了 Callable 对象的 call() 方法的返回值。最后,使用 Future Task 对象作为 Thread 对象的 target 创建线程...
FutureTask类同时实现了Future和Runnable接口,因此它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。例如: Callable<Integer> mycallabletask = new MyCallableTask(); FutureTask...
本文将深入探讨四种实现线程的方法:Thread类、Runnable接口、Callable接口以及ExecutorService。每种方法都有其特定的应用场景和优势,下面我们将逐一详细讲解。 1. **Thread类** 当直接继承`java.lang.Thread`类...
异步Future机制是Java多线程中用于提升效率和优化资源利用的一种设计模式,它允许我们在主线程中不等待子线程的执行结果,而是通过Future对象来获取子线程的计算结果。这种方式极大地提高了程序的响应速度,尤其是在...
解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...
2. **Future接口**:`Future, Object>>> future` 是一个Future对象,它是用于获取Callable线程执行结果的接口。`future.get()` 方法会阻塞,直到计算完成并返回结果。 3. **ExecutorService**:`ExecutorService ...