【发布时间】:2019-02-19 03:48:34
【问题描述】:
我在同步对象方面遇到问题,需要您的帮助。我正在创建一个游戏,但我无法让同步线程工作。我正在尝试创建 2 个线程,它们每次更改 textView 时都会相互通知。你能帮帮我吗?提前谢谢你。这是我的代码:
public void doPattern(int i) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock1) {
try {
lock1.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.setText(text.get(0));
synchronized (lock2) {
lock2.notify();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock2) {
try {
lock2.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.setText(text.get(1));
synchronized (lock1) {
lock1.notify();
}
}
});
t1.start();
t2.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
你马上在两把锁上等待。如果两个线程都在等待,它们怎么能做任何事情?
-
我试图在最后添加 lock1.notify() 但它不起作用。这只是一个测试活动。我试图在通知和同步方面做得更好,以便我可以在我的应用程序中使用它们。谢谢你的回答
-
如果有人看到这个我还有一个问题:有没有办法像无限循环一样互相通知,如何启动它。因为我尝试在最后通知并没有任何反应......
-
您想将
wait()与条件循环结合使用。例如,创建一个由lock1保护的boolean。对wait()使用循环,而boolean是false。整个循环应该在synchronized块内。当您希望线程终止时,获取锁,将boolean设置为true,然后在锁上调用notifyAll()。为lock2做同样的事情。
标签: java android multithreading synchronized notify