0

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

假设:

class OnlyConcept implements Runnable {

  OnlyConcept() {

  new Thread(this).start();
}

public void run() {

// call methods or do something meaningful
}

}
4

2 回答 2

2

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

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

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

于 2013-11-08T07:35:30.657 回答
1

你必须做两件事:

  1. 通过将名称传递给Thread构造函数来命名您的线程
  2. 检查方法Thread.currentThread.getName()的第一行run,抛出一些合适的异常,比如RuntimeException它是否不正确。

这不是 100% 万无一失的,因为其他人可以将他们的线程命名为与您的相同。

于 2013-11-08T07:31:07.983 回答