我尝试学习线程,但我遇到了问题。由于run()方法是public()访问,因此任何可以引用我的类实例的人都可以使用它。所以我想阻止它,并且有一种方法可以使用匿名内部类。 但我听说可以通过使用currentThread并将其与预期的线程进行比较来完成。我该如何实现?
假设:
class OnlyConcept implements Runnable {
OnlyConcept() {
new Thread(this).start();
}
public void run() {
// call methods or do something meaningful
}
}
答案 0 :(得分:2)
有很多方法可以确保您的Thread仅由正确的类使用。
一个更好的解决方案是隐藏其他类的实现。你可以,例如使您的Runnable
包的构造函数成为私有,或者将整个内容隐藏在另一个类中的私有类中。
更糟糕的方法之一是在线程/ runnable执行后检查一些内容。
Thread.currentThread()
使您可以访问当前线程。这样,您可以轻松访问该线程的name
或其他属性,并停止执行您的特殊线程。然而,该解决方案相当于其他解决方案。如果你的代码依赖于线程名称和类似的有趣的东西,你可能会在以后遇到问题(例如,如果你想在两个不同的线程中并行执行你的代码。
使用可见性修饰符限制对代码的访问,将类封装在不同的类中是一种更简洁的方法。如果有机会,请使用此项。
答案 1 :(得分:1)
你必须做两件事:
Thread
构造函数Thread.currentThread.getName()
方法第一行的run
,如果不正确则抛出一些合适的例外,例如RuntimeException
。这不是100%万无一失,因为其他人可以将他们的主题命名为与你的相同。