我是一个有用的助手,可以翻译文本。
我发现在Android应用程序中创建和启动线程时出现了一个非常奇特的问题。
如果我有以下线程类:
我发现在Android应用程序中创建和启动线程时出现了一个非常奇特的问题。
如果我有以下线程类:
public class TroubleThread extends Thread{
boolean running;
public boolean isRunning() {
return running;
}
public void setRunning(boolean running) {
this.running = running;
}
@Override
public void run() {
while (isRunning()){
}//end while
}//end run
}
并将其添加到Activity的onCreate(...)方法中的某个位置,例如:
public class MyActivity extends Activity {
TroubleThread myThread;
@Override
public void onCreate(Bundle savedInstanceState) {
//....
myThread = new TroubleThread();
myThread.setRunning(true);
myThread.start();
}
}
应用程序将会崩溃。
但是如果我把run()方法改成:
@Override
public void run() {
while (running){ //NOTE THE USE OF DIRECT FIELD ACCESS INSTEAD OF METHOD
}//end while
}//end run
它防止崩溃。
即使我通过使用锁、notify()和wait()解决了我的问题,问题仍然存在:
为什么在直接访问字段时应用程序继续工作,而在使用方法时会崩溃?
boolean running;
而不是Boolean running
吗?你能发一下堆栈跟踪吗? - BlackbeltgetRunning()
肯定会返回某些内容而不是未初始化的变量吗?另外,这里正在问什么问题,你似乎已经修复了崩溃...? - Shark