Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java postDelayed有时不';我不能在安卓系统中运行_Java_Android_Multithreading_Handler - Fatal编程技术网

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,则与初始情况相同。你能让class
PrizeRunnable
静态吗?
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);
              }
          }
    }
}