从工作中返回值
import java.util.ArrayList;
import java.util.concurrent.*;
class TaskWithResult implements Callable<String> { //要想得到返回值能够实现Callable接口,类型参数是返回值的类型
private int id;
public TaskWithResult(int id) {
this.id = id;
}
@Override
public String call() throws Exception { //实现call()办法,而不是run()
return "result of TaskWithResult" + id;
}
}
public class CallableDemo {
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
ArrayList<Future<String>> results = new ArrayList<>(); //submit办法会产生Future对象
for (int i = 0; i < 10; i++) {
results.add(exec.submit(new TaskWithResult(i)));//必须应用ExectorService.submit()办法调用
}
for (Future<String> fs :
results) {
try {
System.out.println(fs.get()); //get()办法获取返回的后果,
} catch (InterruptedException e) {
System.out.println(e);
return;
} catch (ExecutionException e) {
System.out.println(e);
}finally {
exec.shutdown(); //敞开
}
}
}
}
- 能够应用Futrue对象的isDone()办法来查问Futrue是否已实现
- 也能够间接调用get(),get()办法会等到后果就绪后调用
优先级
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SimplePriorities implements Runnable{
private int countDown = 5;
private volatile double d;
private int priority;
public SimplePriorities(int priority) {
this.priority = priority;
}
public String toString(){
return Thread.currentThread()+"优先级:"+priority + "计数" + ":"+countDown;
}
@Override
public void run() {
Thread.currentThread().setPriority(priority);
while (true) {
for (int i = 0; i < 100000; i++) {
d += (Math.PI + Math.E) / (double) i;
if (i%1000==0) Thread.yield();
}
System.out.println(this);
if (--countDown==0) return;
}
}
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < 5; i++) {
exec.execute(new SimplePriorities(Thread.MIN_PRIORITY));
}
exec.execute(new SimplePriorities(Thread.MAX_PRIORITY));
exec.shutdown();
}
}
发表回复