关于java:Java-线程

从工作中返回值

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();
 }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理