gpt4 book ai didi

java - Android Java Notify 不触发等待

转载 作者:行者123 更新时间:2023-12-01 23:49:56 25 4
gpt4 key购买 nike

我试图理解这种线程并发编程,但我似乎不明白这个 wait() 和 notification()

我怀疑这与我的一个线程永远等待并且通知已经被调用有关。但我不知道如何解决这个问题。我读了 stackoverflow 上其他人的帖子,但不太理解。

这是我的代码,如果有人能指出我正确的方向,那将会很有帮助。

package com.example.thread_android;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Stage", "onCreate");

Runnable AthreadJob = new ARunnable();
Runnable BthreadJob = new BRunnable();
Thread myThreadOne = new Thread(AthreadJob);
Thread myThreadTwo = new Thread(BthreadJob);
myThreadOne.start();
myThreadTwo.start();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}

class ARunnable implements Runnable{
@Override
public void run(){
Log.d("Runnable", "A Inside Run - WAIT");
try{
synchronized(this){wait();}
} catch (InterruptedException e) {}
//Log.d("Runnable", "A Inside Run - CONTINUE");
}
}

class BRunnable implements Runnable{
@Override
public void run(){
Log.d("Runnable", "B Inside Run");
synchronized (this) {notify();}
}
}

最佳答案

JB Nizet 的建议是正确的。不要开始使用 wait/notify 来学习多线程。您应该从更高的信号机制开始;例如信号量、锁存器、 future 等等。

但是,您的代码被阻止的原因是 wait()ARunnable.run没有看到notify()BRunnable.run就是等待和通知是在不同的对象上执行的。如果您希望一个“可运行”向另一个“可运行”发出信号,则它们需要一个共享对象,并且它们都需要 synchronize在该对象上并调用 wait()notify就在上面。

关于java - Android Java Notify 不触发等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16440162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com