Вот мой пример кода.Как сделать два потока ждать друг друга?
class A implements Runnable{
//stuff
Thread thr = new Thread(this);
boolean flag;
public void run()
{
while(true){
if(condition)flag = true;
}
}
}
class B implements Runnable{
//stuff
A a = new A();
Thread thr = new Thread(this);
public void run()
{
while(true){
//i ll do some thing here
if(a.flag == true)System.out.println("Kaboom");
}
}
public static void main(String[] args)
{
B b = new B();
}
}
Так дело в том, я начать б перед и я хочу б не ждать, пока a.flag == истинный огонь «Kaboom» и a.thr должны ждать, когда б делать свою работу в перспективе() метод. Я пробовал это, но он не работает
class A implements Runnable{
//stuff
Thread thr = new Thread(this);
boolean flag;
public void run()
{
while(true){
if(condition)flag = true;
synchronized(B.class){
this.flag=true;
B.class.notifyAll();
}
}
}
}
class B implements Runnable{
//stuff
A a = new A();
Thread thr = new Thread(this);
public void run()
{
while(true){
synchronized(this){
while(a.flag!=true)
{
this.wait();
}}
}
}
public static void main(String[] args)
{
B b = new B();
}}
Должно возникнуть проблема в моем синхронизированном блоке, но я не знаю, что.
Это, наверное, глупый вопрос, но я просто новичок в JAVA, и я действительно не получаю этот материал Thread и как он работает. Plz help me
Рассматривали ли вы использование Thread.Join() таким образом, что A должен закончиться до начала B. https://docs.oracle.com/javase/tutorial/essential/concurrency/join.html – JamesDonnelly
метод join() убьет поток, и я не хочу, чтобы это произошло – Anonymous