У меня есть следующий код.
ReadWriteLock someLock = new ReentrantReadWriteLock();
Condition someCondition = someLock.writeLock().newCondition();
public someMethod() {
// do some stuff
someCondition.await(); //Lock here.
System.out.prinltn("This never prints");
}
public doSomeStuff() {
new Thread(new Runnable() {
@Override
public void run() {
try {
someMethod();
System.out.println("thread finished");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread is going to die");
}
}).start();
}
Когда поток вызывает метод someMethod()
, он выполняется. Но поскольку для этой функции есть метод await()
. Он никогда не заканчивается / он не печатает «Это никогда не печатается», если только его не разбудит singnalAll()
. Но я хочу, чтобы поток был завершен после его выполнения.
Я не могу реорганизовать все это. Мне просто нужно обходное решение этой проблемы. Он используется в приложении Swing. Так что нить важна.
someMethod
, но если это часть сторонней библиотеки, у вас может не быть выбора. 13.06.2014