正如你所看到的,我是多線程新手,有點卡在這裏。對於我的程序,我需要一個線程(在下面的例子中爲PchangeThread
),可以在程序執行期間的任何時刻從另一個線程開啓和關閉。 線程應在啓動時暫停,並在調用pixelDetectorOn()
時繼續。多線程初學者問題
這兩個線程很可能不需要共享任何數據,除了啓動/停止標誌。無論如何,我還包括對主線程的引用,以防萬一。
但是,在下面的代碼中,唯一輸出的消息是「進入循環之前」,這表明線程從不會從wait()出於某種原因而被喚醒。我猜這是一種鎖定問題,但我一直無法弄清楚究竟發生了什麼問題。從主線程鎖定this.detector
給了我相同的結果。此外,我想知道如果wait()
/notify()
範例真的是暫停和喚醒線程的方式。
public class PchangeThread extends Thread {
Automation _automation;
private volatile boolean threadInterrupted;
PchangeThread(Automation automation)
{
this._automation = automation;
this.threadInterrupted = true;
}
@Override
public void run()
{
while (true) {
synchronized (this) {
System.out.println("before entering loop");
while (threadInterrupted == true) {
try {
wait();
System.out.println("after wait");
} catch (InterruptedException ex) {
System.out.println("thread2: caught interrupt!");
}
}
}
process();
}
}
private void process()
{
System.out.println("thread is running!");
}
public boolean isThreadInterrupted()
{
return threadInterrupted;
}
public synchronized void resumeThread()
{
this.threadInterrupted = false;
notify();
}
}
resumeThread()
從主線程調用方式如下:
public synchronized void pixelDetectorOn(Context stateInformation) {
this.detector.resumeThread();
}
detector
是的PchangeThread
實例的引用。 的「探測器」 -thread是該程序的主模塊中實例化方式如下:
detector=new PchangeThread(this);
此網站是爲了獲取工作代碼的評論。在SO上更好地詢問這種問題。現在遷移到那裏。 – sepp2k