[英]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.