Java postDelayed有时不';我不能在安卓系统中运行
我正在代码中运行多线程和处理程序 这是我的经纪人Java postDelayed有时不';我不能在安卓系统中运行,java,android,multithreading,handler,Java,Android,Multithreading,Handler,我正在代码中运行多线程和处理程序 这是我的经纪人 PrizeRunnable mTempPotionRunnable = new PrizeRunnable(aaa); handler.postDelayed(mTempPotionRunnable, 4000); 及 但有时它会同时运行 我不知道原因 已更新 我尝试将其更改为: handler.postDelayed(mTempPotionRunnable, 4000); 及 也许它能解决我的问题。我正在测试这个方法 但我无法将参数传递给我
PrizeRunnable mTempPotionRunnable = new PrizeRunnable(aaa);
handler.postDelayed(mTempPotionRunnable, 4000);
及
但有时它会同时运行
我不知道原因
已更新
我尝试将其更改为:
handler.postDelayed(mTempPotionRunnable, 4000);
及
也许它能解决我的问题。我正在测试这个方法
但我无法将参数传递给我的
Runnable
。我该怎么做?我猜这是因为您正在当前实例上同步:
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);
}
}
}
}
生成全局变量,然后我可以将参数传递给我的
Runnable
Hi,“字段锁不能在非静态内部类型中声明为静态,除非使用常量表达式初始化”,这样我就可以删除静态,但有时它仍然运行simultaneously@ZuzooVn:因为如果删除static,则与初始情况相同。你能让classPrizeRunnable
静态吗?
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);
}
}
}
}