相关疑难解决方法(0)

为什么wait()始终处于同步块中

我们都知道,为了调用Object.wait(),这个调用必须放在synchronized块中,否则IllegalMonitorStateException抛出一个.但是这个限制的原因是什么?我知道wait()释放监视器,但为什么我们需要通过使特定块同步显式获取监视器,然后通过调用释放监视器wait()

如果可以wait()在同步块之外调用,保留它的语义 - 暂停调用程序线程,可能造成的损害是什么?

java concurrency multithreading wait

250
推荐指数
3
解决办法
13万
查看次数

如何解决Java中的"双重检查锁定"声明?

我想在Java中实现多线程的延迟初始化.
我有一些类似的代码:

class Foo {
    private Helper helper = null;
    public Helper getHelper() {
        if (helper == null) {
            Helper h;
            synchronized(this) {
                h = helper;
                if (h == null) 
                    synchronized (this) {
                        h = new Helper();
                    } // release inner synchronization lock
                helper = h;
            } 
        }    
        return helper;
    }
    // other functions and members...
}
Run Code Online (Sandbox Code Playgroud)

而且我得到了"Double-Checked Locking is Broken"声明.
我怎么解决这个问题?

java concurrency multithreading locking lazy-loading

33
推荐指数
3
解决办法
2万
查看次数

标签 统计

concurrency ×2

java ×2

multithreading ×2

lazy-loading ×1

locking ×1

wait ×1