[英]Does instance of runnable class gets destroyed when Thread exits in Java
如果有一個使用以下代碼實現可運行類的類:
public class MyRunnable implements Runnable {
public Thread t;
// Other variables;
public MyRunnable() {
t = new Thread(this, "MyRunnable Thread");
// Initialise other variables.
}
public void run() {
//Do something.
}
}
我以以下方式制作上述類的實例:
public class MyFunc () {
satic void main (String ards[]) {
MyRunnable mr = new MyRunnable();
mr.t.start();
while (true) {
Thread.sleep(10000);
if (!mr.isAlive()) {
//Execute mr again.
// How to do it ?
}
}
}
}
我該怎么辦?
我有兩種想法,但不確定哪一種是正確的:
1. mr.t.start();
2. MyRunnable mr = new MyRunnable(); mr.t.start();
我應該重新創建先生先生嗎?
還是我應該與現有實例或先生一起工作?
從MyRunnable
刪除對Thread
的MyRunnable
。
在Java中啟動線程成語看起來像這樣
new Thread(new MyRunnable()).start()
垃圾收集的一般規則適用於清理可運行對象。 如果沒有可運行的對象引用,則可能會對其進行垃圾回收。
關於用Java編寫多線程代碼有許多習慣用法,請參閱Java教程 。 保持簡單和分開:
public class YourTask implements Runnable {
@Override
public void run() {
// do something
}
}
一個最小的示例應用程序:
public class YourApp {
public static void main(final String[] args) throws InterruptedException {
final YourTask yourTask = new YourTask();
final Thread thread = new Thread(yourTask);
thread.start();
thread.join();
}
}
小心並發性-在不完全了解(例如通過閱讀Java Concurrency in Practice)之前,不要在生產中使用此代碼。
我不喜歡這個代碼。
您的Runnable
不應具有公開或私有的Thread
成員。 我建議將其刪除。 簡單思考:關注點分離。 這是您的Runnable應該看起來像的樣子:
public class MyRunnable implements Runnable {
public void run() {
//Do something.
}
}
而已。 讓其他知道如何運行事物的類來處理該部分。
您最好查看較新的並發包類,例如Executor
。
除非您已閱讀Brian Goetz的“ Java Concurrency In Practice”並已充分理解它,否則您不應該嘗試進行大量的多線程編程。 您不太可能遇到麻煩。
Runnable具有run()方法,因此您無需在其中使用單獨的Thread,除非您從變量(對象)定義的上下文中退出並松開引用,否則不會破壞任何線程。
http://www.javamex.com/tutorials/threads/thread_runnable_construction.shtml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.