JVM可以优化空的同步块吗?

时间:2016-05-29 07:47:54

标签: java multithreading

我有聚合器类,它会在一段时间内累积一些数据。现在,在此之后,它已经关闭接受新数据并且能够产生一些聚合结果(可能由另一个线程计算而不是执行聚合的线程)。这是它的样子:

public class Aggregator{

    private volatile boolean closed;
    private Collection<Integer> data = new LinkedList<>();
    private int counter;
    private final Object mutex = new Object();

    public void close(){
        closed = true;
    }

    public boolean isClosed(){
       return closed;
    }

    public void add(Integer i){
        if(!closed){
            synchronized(mutex){
                if(__some_complex_condition__)
                    ++counter;
                data.add(i);
            }
        }
    }

    public Intger compute(){
        if(closed){
            synchronized(mutext){ }    //<----- IS IT SAFE???
                                       //to ensure data-visibility
            Integer retVal;
            //perform computation on data and counter
            return retVal;
        }
        return null;
    }
}

使用空的同步块来确保数据一致性是否可靠?我想是的,只要这个类的合同告诉我们一旦Aggregator关闭就不会接受新的数据,如果它仍然无法计算价值开。

但我对此并不十分肯定。也许JVM只是选择空闲同步块,我会遇到大麻烦......

0 个答案:

没有答案