簡體   English   中英

線程問題:程序無法啟動

[英]Thread issue: program doesn't start

好的,這就是我所擁有的:我正在嘗試在Processing中創建基於線程的程序。 該程序的作用非常簡單,我可以解決,但是當我嘗試使其在線程中運行時,這很有趣!

長話短說,我試圖做這樣的事情:

class supportClass{
   [All the junk.];
};
class threadClass extends Thread{
   boolean goingThread;
   [Some other junk.];
   threadClass(){
      goingThread = false;
      [Junk.]
   }
   void start(supportClass var){
      goingThread = true;
      run(var);
      goingThread = false;
   }
   void run(supportClass var){
      [Junk which does all the work!]
   }
};

這是setup()方法:

void setup(){
   [Some junk init.];
   supportClass mySupportClass = new supportClass();
   threadClass myClass = new threadClass();
   myClass.start(mySupportClass);
}

因此,這里有兩個問題:

1)框架甚至沒有顯示出來; 我的意思是:該程序似乎根本沒有運行...;

2)由於mySupportClass上的數據發生更改,因此我不確定所使用的賦值方法。

在StackOverflow中搜索時,我沒有發現任何有關在線程中解析值的信息[正在處理中],所以...在這里!

有小費嗎?

@重寫超類run()方法以添加您的線程代碼。 如果要使用參數自己的start()方法,可以,但是不要調用run(),請調用start()。

首先,線程永遠不會執行,因為除非您自己調用,否則重載方法run(supportClass var)將被Thread類忽略。 實際上,Thread類期望沒有參數的run方法執行。

其次,對於啟動方法。 在您的代碼中,您提供了自己的啟動方法。 您沒有覆蓋Thread類的start方法。 結果,您的線程將永遠不會進入可運行狀態。 Thread類的start方法將當前線程狀態從New狀態(剛剛創建)更改為Runnable狀態(准備通過調用run方法執行)。 當線程處於可運行狀態時,可以由JVM調度程序隨時選擇執行該線程。

因此,您有2件事要做(不更改代碼):首先在start(supportClass var)方法中,只需調用super.start()使其處於Runnable狀態。 並刪除run(var)因為正如我所說,調用線程不是程序員的工作,而是JVM調度程序。 並定義一個不帶參數的run方法。

如果要將參數傳遞給線程類,則取決於您的策略。 如果每個SupportClass實例需要一個線程(最簡單),則可以在構造函數中傳遞它們。

我建議您閱讀這些鏈接以獲取有關線程的更多信息:

  1. http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
  2. http://docs.oracle.com/javase/tutorial/essential/concurrency/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM