我在我的代码中运行多个线程和Handler。
这是我的处理程序
PrizeRunnable mTempPotionRunnable = new PrizeRunnable(aaa);
handler.postDelayed(mTempPotionRunnable, 4000);
和
class PrizeRunnable implements Runnable {
String type;
PrizeRunnable(String type) {
this.type = type;
}
public void run() {
synchronized (this) {
if(!mIsHandlerStarted){
if(type.equals(aaa))
// Do something
else if(type.equals(bbb))
// Do something
mIsHandlerStarted = true;
handler.removeCallbacks(this);
}
}
}
}
但有时它同时运行。
我不知道原因。
已更新
我尝试将其更改为:
handler.postDelayed(mTempPotionRunnable, 4000);
和
Runnable mTempPotionRunnable = new Runnable() {
@Override
public void run() {
synchronized (this) {
if(!mIsHandlerStarted){
// Do something
mIsHandlerStarted = true;
handler.removeCallbacks(mMetalRunnable);
}
}
}
};
可能会解决我的问题。我正在测试这种方法。
但是我无法将参数传递给我的Runnable
。我该怎么办?
答案 0 :(得分:1)
我的猜测是因为你正在同步当前的实例:
synchronized (this) {
...
}
因此,除非您将相同的实例传递给所有处理程序,否则每个处理程序将使用不同的锁定对象。请尝试静态锁定:
class PrizeRunnable implements Runnable {
String type;
private static final Object lock = new Object();
PrizeRunnable(String type) {
this.type = type;
}
public void run() {
synchronized (lock) {
if(!mIsHandlerStarted){
if(type.equals(aaa))
// Do something
else if(type.equals(bbb))
// Do something
mIsHandlerStarted = true;
handler.removeCallbacks(this);
}
}
}
}
答案 1 :(得分:0)
创建全局变量,我可以将参数传递给我的Runnable