0

我需要编写一个使用多个线程的程序。创建线程对象后,我需要使用 run() 方法。这个run方法好像是内置的。但是,我需要编写它,并且每次调用它时都需要它运行一个循环。谁能帮我理解如何做到这一点?

4

3 回答 3

1

Thread您可以通过传递接口的匿名实现来创建新实例Runnable,然后使用该start()方法启动线程执行。见下文:

Thread t = new Thread(new Runnable() {
  public void run() {
    while (!stopped) {
      // do something interesting here
    }
  }
});
t.start();
于 2012-09-11T19:58:57.623 回答
0

run()方法内置在Thread类中是绝对正常的。此类旨在为应用程序中将代表执行线程的任何类提供基本基础结构。将Thread其视为“世界上的任何线程”。现在在您的应用程序中使用它的正确方法是提供您自己的继承 Thread类。这是使用extends关键字或使用匿名类完成的,就像在 Dan 的回答中一样。假设您已经扩展了Thread类并调用了您的类TaskToRunInParallel

文档说这个Thread类是特殊的——如果你继承它(就像我们刚刚做的那样)并将一些代码放在run()你自己的类的方法中(TaskToRunInParallel在我们的例子中),这个代码将与应用程序的其余部分并行执行。您需要做的就是调用start()类的对象TaskToRunInParallel

这就是该run()方法是内置的原因:它为您提供了一个原型方法,可以在您自己的类中覆盖。这样,任何与Thread对象一起工作的代码都将能够与您的TaskToRunInParallel对象或任何其他继承自Thread. 真的:保证它们都将run()继承自方法,Thread并且该段代码调用它是安全的。但是,此调用的结果总是不同的:每个继承自的类都可能以自己的方式Thread覆盖。run()这称为多态性,与继承一起是面向对象编程的基石之一。

run()当您考虑覆盖类的方法时,令人惊讶的是涉及到多少概念Thread。祝你好运。

于 2012-09-11T22:18:20.517 回答
0

看着:

计数信号量 http://tutorials.jenkov.com/java-concurrency/semaphores.html#counting

于 2012-09-11T19:58:18.200 回答