[英]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實例需要一個線程(最簡單),則可以在構造函數中傳遞它們。
我建議您閱讀這些鏈接以獲取有關線程的更多信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.