无法理解屏障代码

时间:2016-01-16 20:04:56

标签: java multithreading barrier

我遇到了这个障碍代码,我无法理解barrierPost方法。

我应该使用这段代码来解决一个练习,其中两队线程相互竞争计数到10000.

我不明白为什么同样的情况会产生不同的结果

public class Barrier {

    private int currentPosters = 0, totalPosters = 0;
    private int passedWaiters = 0, totalWaiters = 1;

    /**
     * @param totalPosters - Nr of threads required to start the waiting threads
     * @param totalWaiters - Nr of threads started later 
     */
     public Barrier (int totalPosters, int totalWaiters) {
     this.totalPosters = totalPosters; 
     this.totalWaiters = totalWaiters;

    }

    public synchronized void init(int i) {
        totalPosters = i; currentPosters=0;
    }

    public synchronized void barrierSet(int i) {
        totalPosters = i; currentPosters=0;
    } 

    public synchronized void barrierWait() {
        boolean interrupted = false;
        while (currentPosters = totalPosters) {
            try {wait();} 
            catch (InterruptedException ie) {interrupted=true;}
        }
        passedWaiters++;
        if (passedWaiters == totalWaiters) {
            currentPosters = 0; passedWaiters = 0; notifyAll();
        }
        if (interrupted) Thread.currentThread().interrupt();
    }

    public synchronized void barrierPost() {
        boolean interrupted = false;   // In case a poster thread beats barrierWait, keep count of posters.
        while (currentPosters == totalPosters) { 
            try {wait();} 
            catch (InterruptedException ie) {interrupted=true;}
        }
        currentPosters++;
        if (currentPosters == totalPosters) notifyAll();
        if (interrupted) Thread.currentThread().interrupt();
   }
} 

有人可以帮忙吗?

0 个答案:

没有答案