java编程思想笔记---并发优先级

来源:互联网 发布:泰安中商网络 编辑:程序博客网 时间:2024/05/21 10:00
2017/7/31创建
/*   * jdk的十个优先级与操作系统之间映射的不好,所以只推荐MAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY * 三个优先级 */public class SimplePriorities implements Runnable {    private int countDown=5;    //禁止编译器对变量d进行优化    private volatile double d;    private int priority;    public SimplePriorities(int priority){        this.priority=priority;    }    public String toString(){        return Thread.currentThread()+":"+countDown;    }    @Override    public void run() {        //线程的优先级应该在run内设置,因为线程只有在运行后设置的优先级才是有效的        Thread.currentThread().setPriority(priority);        while (true) {            for (int i = 0; i < 10000; i++) {                //当除数为0时,程序没有抛出异常,原因是double中的0不是真正的0或0.0 而是一个很长的                //可能是0.000000000001或其它,所以一个正数除以0.0结果就得很大很大                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();    }}