是的,它有效,但您可能需要考虑其他一些方法来完成此操作并使您的代码更易于理解。您可以创建第二个Runnable
类从您的主类调用,例如:
public class Mindblower {
public static void main(String[] args) {
Thread ownThread = new Thread(new MindblowingRunnable());
ownThread.start();
// Other stuff that you want done concurrently on the main thread
}
private class MindblowingRunnable implements Runnable {
@Override
public void run() {
// Stuff to be carried out in your thread
}
}
}
如果仅在该上下文中使用,这可以变得更简单Runnable
,只要Runnable
该类不需要是公共的:
public class Mindblower {
public static void main(String[] args) {
Thread ownThread = new MindblowingThread();
ownThread.start();
// Other stuff that you want done concurrently on the main thread
}
private class MindblowingThread extends Thread {
@Override
public void run() {
// Stuff to be carried out in your thread
}
}
}
虽然您可以保留对线程的本地引用,但这仅在您需要从主线程中断它时才有用。从内部Runnable
,只需调用Thread.currentThread()
。
对于您的奖励问题,不需要start()
从构造函数调用,甚至不需要从main()
. 如果您希望线程在程序启动后立即运行,这两个选项都是可选的,但在某些情况下,您可能更愿意先等待用户输入并start()
从其他方法调用。
所有这些都假设您只创建一个线程,或者如果有多个线程,它们之间的同步对您的程序来说不是问题。如果同步很重要,请考虑使用线程池。