有很多人在从事项目工作,我想确保每个人都为他们的线程提供逻辑名称,以便于调试和阅读日志。
我试过跟随,但由于我后来意识到的一个非常根本的原因而失败了。我把这个代码放在这里,这样我的目的就更清楚了。
public abstract class MyRunnableAbstract implements Runnable
{
public MyRunnableAbstract (String pThreadName)
{
Thread.currentThread().setName(pThreadName);
}
}
在这里,每个想要创建线程的人都必须扩展这个类,而不是直接实现Runnable。这样,您必须将名称传递给超级构造函数。
上面不起作用,因为构造函数是作为父线程的一部分执行的,因此currentThread()
设置父线程的名称而不是正在创建的线程的名称。
但我想做类似的事情,没有人能够在不传递名字的情况下创建线程。
有办法吗?
提前致谢。
答案 0 :(得分:3)
由于您想要更改Thread的行为,显而易见的事情是扩展Thread。扩展类应仅公开带有name参数的构造函数。
当然,您还需要一个禁止直接使用Thread的编程约定。
答案 1 :(得分:2)
ThreadFactory是你的朋友,我的朋友。它旨在用于此目的 - 创建应用程序的所有自定义线程的中心位置;工厂设计模式的一个例子。见下面的代码:
SqlAzureExecutionStrategy
答案 2 :(得分:0)
无法阻止用户严重编程。您可以扩展Thread
,例如如下:
public class NamedThread extends Thread {
public NamedThread(String name) {
super();
setName(name);
}
}
然后你必须通知工作团队,那些没有使用新NamedThread
的人会受到制裁......例如......他们每次使用正常时都必须向整个团队提供比萨饼{ {1}}代替Thread
:-D
如果一个月后整个小组已经增加了10公斤......可能你的小组没有按照你的指示工作:-D