读书人

Java 多线程(2)

发布时间: 2012-12-27 10:17:10 作者: rapoo

Java 多线程(二)
CycliBarrier. 等所有线程都达到一个起跑线后才能开始继续运行。

public class CycliBarrierTest implements Runnable {    private CyclicBarrier barrier;    public CycliBarrierTest(CyclicBarrier barrier) {        this.barrier = barrier;    }    public void run() {        //do xxxx;        try {            this.barrier.await();//线程运行至此会检查是否其它线程都到齐了,没到齐就继续等待。到齐了就执行barrier的run函数体里的内容        } catch (Exception e) {        }    }    /**     * @param args     */    public static void main(String[] args) {        //参数2代表两个线程都达到起跑线才开始一起继续往下执行        CyclicBarrier barrier = new CyclicBarrier(2, new Runnable() {                public void run() {                    //do xxxx;                }            });        Thread t1 = new Thread(new CycliBarrierTest(barrier));                 Thread t2 = new Thread(new CycliBarrierTest(barrier));        t1.start();        t2.start();    }}

这简化了传统的用计数器+wait/notifyAll来实现该功能的方式。

10 并发3定律
    Amdahl定律. 给定问题规模,可并行化部分占12%,那么即使把并行运用到极致,系统的性能最多也只能提高1/(1-0.12)=1.136倍。即:并行对提高系统性能有上限。 Gustafson定律. Gustafson定律说Amdahl定律没有考虑随着cpu的增多而有更多的计算能力可被使用。其本质在于更改问题规模从而可以把Amdahl定律中那剩下的88%的串行处理并行化,从而可以突破性能门槛。本质上是一种空间换时间。 Sun-Ni定律. 是前两个定律的进一步推广。其主要思想是计算的速度受限于存储而不是CPU的速度. 所以要充分利用存储空间等计算资源,尽量增大问题规模以产生更好/更精确的解.
11 由并发到并行

计算机识别物体需要飞速的计算,以至于芯片发热发烫,而人在识别物体时却一目了然,却并不会导致某个脑细胞被烧热烧焦(夸张)而感到不适,是由于大脑是一个分布式并行运行系统,就像google用一些廉价的linux服务器可以进行庞大复杂的计算一样,大脑内部无数的神经元的独自计算,互相分享成果,从而瞬间完成需要单个cpu万亿次运算才能有的效果。试想,如果在并行处理领域有所创建,将对计算机的发展和未来产生不可估量的影响。当然,其中的挑战也可想而知:许多的问题是并不容易轻易就“分割”的了的。

作者: Dapple HouEmail:mmonkeyer@163.com

?

http://hi.baidu.com/dapplehou/blog/item/0a4c65388143b72c96ddd814.html

读书人网 >编程

热点推荐