如何防止方法run()?

时间:2013-11-08 07:27:40

标签: java

我尝试学习线程,但我遇到了问题。由于run()方法是public()访问,因此任何可以引用我的类实例的人都可以使用它。所以我想阻止它,并且有一种方法可以使用匿名内部类。 但我听说可以通过使用currentThread并将其与预期的线程进行比较来完成。我该如何实现?

假设:

class OnlyConcept implements Runnable {

  OnlyConcept() {

  new Thread(this).start();
}

public void run() {

// call methods or do something meaningful
}

}

2 个答案:

答案 0 :(得分:2)

有很多方法可以确保您的Thread仅由正确的类使用。 一个更好的解决方案是隐藏其他类的实现。你可以,例如使您的Runnable包的构造函数成为私有,或者将整个内容隐藏在另一个类中的私有类中。

更糟糕的方法之一是在线程/ runnable执行后检查一些内容。 Thread.currentThread()使您可以访问当前线程。这样,您可以轻松访问该线程的name或其他属性,并停止执行您的特殊线程。然而,该解决方案相当于其他解决方案。如果你的代码依赖于线程名称和类似的有趣的东西,你可能会在以后遇到问题(例如,如果你想在两个不同的线程中并行执行你的代码。

使用可见性修饰符限制对代码的访问,将类封装在不同的类中是一种更简洁的方法。如果有机会,请使用此项。

答案 1 :(得分:1)

你必须做两件事:

  1. 通过将名称传递给Thread构造函数
  2. 来命名您的线程
  3. 检查Thread.currentThread.getName()方法第一行的run,如果不正确则抛出一些合适的例外,例如RuntimeException
  4. 这不是100%万无一失,因为其他人可以将他们的主题命名为与你的相同。