我需要编写一个使用多个线程的程序。创建线程对象后,我需要使用 run() 方法。这个run方法好像是内置的。但是,我需要编写它,并且每次调用它时都需要它运行一个循环。谁能帮我理解如何做到这一点?
3 回答
Thread
您可以通过传递接口的匿名实现来创建新实例Runnable
,然后使用该start()
方法启动线程执行。见下文:
Thread t = new Thread(new Runnable() {
public void run() {
while (!stopped) {
// do something interesting here
}
}
});
t.start();
run()
方法内置在Thread
类中是绝对正常的。此类旨在为应用程序中将代表执行线程的任何类提供基本基础结构。将Thread
其视为“世界上的任何线程”。现在在您的应用程序中使用它的正确方法是提供您自己的继承 Thread
类。这是使用extends
关键字或使用匿名类完成的,就像在 Dan 的回答中一样。假设您已经扩展了Thread
类并调用了您的类TaskToRunInParallel
。
文档说这个Thread
类是特殊的——如果你继承它(就像我们刚刚做的那样)并将一些代码放在run()
你自己的类的方法中(TaskToRunInParallel
在我们的例子中),这个代码将与应用程序的其余部分并行执行。您需要做的就是调用start()
类的对象TaskToRunInParallel
。
这就是该run()
方法是内置的原因:它为您提供了一个原型方法,可以在您自己的类中覆盖。这样,任何与Thread
对象一起工作的代码都将能够与您的TaskToRunInParallel
对象或任何其他继承自Thread
. 真的:保证它们都将run()
继承自方法,Thread
并且该段代码调用它是安全的。但是,此调用的结果总是不同的:每个继承自的类都可能以自己的方式Thread
覆盖。run()
这称为多态性,与继承一起是面向对象编程的基石之一。
run()
当您考虑覆盖类的方法时,令人惊讶的是涉及到多少概念Thread
。祝你好运。