0

別のスレッドで ReentrantLock を使用する必要があります。可能ですか?PS secondMethod "lock.unlock()" では、IllegalMonitorStateException をスローします。

public class SomeClass {
    private static ConcurrentHashMap<String, String> hashMap = new ConcurrentHashMap<>();
    private final Lock lock = new ReentrantLock();

    public void firstMethod(Action action) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //SOME CODE BEFORE LOCK
                lock.lock();
                //SOME CODE AFTER UNLOCK
            }
        }).start();
    }

    public void secondMethod(Action action) {
        if (hashMap.get("key").length() == 3)
            lock.unlock();
    }
}

編集: java.util.concurrent.locks.Condition で解決!

4

2 に答える 2

0

ロックするスレッドは、ロックを解除するスレッドでもある必要があります。他の方法で解決しようとすると、競合状態が発生します。

于 2016-11-14T10:21:55.870 に答える