Java 从接收方通知线程

Java 从接收方通知线程,java,android,multithreading,broadcastreceiver,Java,Android,Multithreading,Broadcastreceiver,这是我的主线: Thread t = new Thread(){ @Override public void run() { // TODO Auto-generated method stub for(int i = 0; i < passes.length; i++){ progPass.setProgress(i); WifiConfiguration wc = new WifiConf

这是我的主线:

Thread t = new Thread(){

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i = 0; i < passes.length; i++){
            progPass.setProgress(i);
            WifiConfiguration wc = new WifiConfiguration();
            wc.SSID = "\"" + dbw.getSsid() + "\"";
            wc.preSharedKey  = "\"" + passes[i] + "\"";
            wc.status = WifiConfiguration.Status.ENABLED;   
            wc = configureCapabs(wc, dbw.getCapability());
            int res = wifi.addNetwork(wc);
            //Toast.makeText(this, "add Network returned " + res , Toast.LENGTH_SHORT).show();
            boolean b = wifi.enableNetwork(res, true);        
            //Toast.makeText(this, "enableNetwork returned " + b , Toast.LENGTH_SHORT).show();
            if(!b) continue;
            try {
                synchronized(this){
                    this.wait();
                }
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            boolean fin = wifi.getConnectionInfo() != null;
            if(fin) break;
        }
        progPass.dismiss();
        this.interrupt();
    }

};
这里是注册舱单:

 <receiver
        android:name="ConnectivityActionReceiver"
        android:enabled="true"
        android:label="ConnectivityActionReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.STATE_CHANGE" />
            <action android:name="android.net.wifi.supplicant.STATE_CHANGE" />
        </intent-filter>
    </receiver>

此时将显示onReceive方法中应显示的toast,这意味着已接收消息,但通知未到达线程,这意味着它处于等待状态。

您正在使用两个不同的对象进行同步!一个是线程对象,一个是
ConnectivityActionReceiver
。当您使用此

 synchronized(this){
      this.wait();
 }
您锁定的是当前实例,因此您锁定的是案例中的不同实例

解决方案是对通用的全局可见对象调用
wait/notify

final Object signal = new Object();

// in the waiting thread
synchronized(signal) {
    signal.wait();
}

// in the signaling thread
synchronized(signal) {
    signal.notifyAll();
}

您正在使用两个不同的对象进行同步!一个是线程对象,一个是
ConnectivityActionReceiver
。当您使用此

 synchronized(this){
      this.wait();
 }
您锁定的是当前实例,因此您锁定的是案例中的不同实例

解决方案是对通用的全局可见对象调用
wait/notify

final Object signal = new Object();

// in the waiting thread
synchronized(signal) {
    signal.wait();
}

// in the signaling thread
synchronized(signal) {
    signal.notifyAll();
}