在ThreadPoolExecutor中使用ExecutorService中的方法
方法invokeAny()和invokeAll()具有阻塞特性。
package cn.java.Concurrency.executor;
import java.util.concurrent.Callable;
/**
* @author 小石潭记
* @date 2021/12/19 19:51
* @Description: ${todo}
*/
public class MyCallableA implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("mycallableA begin " + System.currentTimeMillis());
for (int i = 0; i < 123456; i++) {
Math.random();
Math.random();
Math.random();
System.out.println("mycallableA" + (i + 1));
}
System.out.println("mycallableA end " + System.currentTimeMillis());
return "return A";
}
}
package cn.java.Concurrency.executor;
import java.util.concurrent.Callable;
/**
* @author 小石潭记
* @date 2021/12/19 19:51
* @Description: ${todo}
*/
public class MyCallableB implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("mycallableB begin " + System.currentTimeMillis());
for (int i = 0; i < 123456; i++) {
Math.random();
Math.random();
Math.random();
System.out.println("mycallableB" + (i + 1));
}
System.out.println("mycallableB end " + System.currentTimeMillis());
return "return A";
}
}
package cn.java.Concurrency.executor;
import java.util.concurrent.Callable;
/**
* @author 小石潭记
* @date 2021/12/19 19:51
* @Description: ${todo}
*/
public class MyCallableB2 implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("mycallableB begin " + System.currentTimeMillis());
for (int i = 0; i < 123456; i++) {
if (Thread.currentThread().isInterrupted() == false) {
Math.random();
Math.random();
Math.random();
System.out.println("mycallableB2" + (i + 1));
} else {
System.out.println("*********抛出异常中断了");
throw new InterruptedException();
}
}
System.out.println("mycallableB2 end " + System.currentTimeMillis());
return "return A";
}
}
package cn.java.Concurrency.executor;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author 小石潭记
* @date 2021/12/19 19:55
* @Description: ${todo}
*/
public class Run {
public static void main(String[] args) {
try {
List list = new ArrayList<>();
list.add(new MyCallableA());
list.add(new MyCallableB());
ExecutorService executor = Executors.newCachedThreadPool();
// invokeAny 只取得最先完成任务的结果值
String result = (String) executor.invokeAny(list);
System.out.println("-----------" + result);
System.out.println("ZZZZZZZZZZZZ");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package cn.java.Concurrency.executor;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author 小石潭记
* @date 2021/12/19 19:55
* @Description: ${todo}
*/
public class Run2 {
public static void main(String[] args) {
try {
List list = new ArrayList<>();
list.add(new MyCallableA());
list.add(new MyCallableB2());
ExecutorService executor = Executors.newCachedThreadPool();
// invokeAny 只取得最先完成任务的结果值
String result = (String) executor.invokeAny(list);
System.out.println("-----------" + result);
System.out.println("ZZZZZZZZZZZZ");
} catch (Exception e) {
e.printStackTrace();
}
}
}