Я новичок в теме синхронизации, и я не мог найти четкую информацию в любом месте об использовании методов wait()
, notify()
и notifyAll()
при попытке доступа к синхронизированному объекту. Для exmaple, если у нас есть такой код:Синхронизация данных между многими потоками
class X extends Thread {
int x;
public void methodX()
{
synchronized(this)
{
//some operations on x
}
}
}
class Y extends Thread {
public void methodY(X x)
{
int z = x.x;
}
}
Если мы называем wait()
в methodY()
и notify()
в конце methodX()
? В противном случае мы не будем присваивать какое-либо значение z
или поток будет ждать без явного вызова wait()
до тех пор, пока X не разблокирует?
Что вы пытаетесь сделать? Включить main() –
Нет, не стоит. Поскольку X.x обращается к нескольким потокам, каждый доступ должен просто синхронизироваться на одном объекте. Прочтите [Java-учебник по параллелизму] (http://docs.oracle.com/javase/tutorial/essential/concurrency/) и Java Concurrency на практике от Брайана Гетца. Также прочитайте javadoc wait() и уведомите(), чтобы узнать, какова их цель и использование. –
Некоторое разъяснение, пожалуйста ... является ли ваше требование о том, что присвоение 'method'' z' должно происходить только после выполнения 'methodX'? –