在
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()解决了我的问题,问题仍然存在:
为什么当使用直接访问该字段时,应用程序继续工作,而在使用它崩溃的方法时?