我可以让线程等待锁定,然后在释放后跳过它吗?

问题描述 投票:0回答:2

给出以下伪代码。一个功能可以同时由多个线程输入。我希望所有线程都执行a()c(),但是b()只能由进入同步块时未锁定的那些线程执行。

换句话说:如果线程必须等待锁,那么我希望它等待直到锁被释放,然后跳过b()并立即继续使用c()

    public void code() {
        a() // check if page is present locally

        if (pageMissing) {
            synchronized (this) {
                page = b(); // get page over REST
            }
        }

        c() // access page
    }

这有什么用?想象一下b()调用一个外部REST函数来更新本地数据。当线程进入时,我们希望确保调用了该函数并更新了本地数据,但是一旦阻塞线程退出b(),我们就知道本地数据是最新的,并且我们不想浪费资源让连续的线程已经在等待再次调用更新功能。

java multithreading synchronization semaphore thread-synchronization
2个回答
0
投票

您可以具有一个volatile boolean


0
投票

我会使用false的某种风格,例如Lock

© www.soinside.com 2019 - 2024. All rights reserved.