如何确保没有自定义名称没有创建线程?

时间:2015-06-17 14:03:02

标签: java multithreading

有很多人在从事项目工作,我想确保每个人都为他们的线程提供逻辑名称,以便于调试和阅读日志。

我试过跟随,但由于我后来意识到的一个非常根本的原因而失败了。我把这个代码放在这里,这样我的目的就更清楚了。

public abstract class MyRunnableAbstract implements Runnable 
{ 
    public MyRunnableAbstract (String pThreadName)
    {
        Thread.currentThread().setName(pThreadName);

    }
}

在这里,每个想要创建线程的人都必须扩展这个类,而不是直接实现Runnable。这样,您必须将名称传递给超级构造函数。

上面不起作用,因为构造函数是作为父线程的一部分执行的,因此currentThread()设置父线程的名称而不是正在创建的线程的名称。

但我想做类似的事情,没有人能够在不传递名字的情况下创建线程。

有办法吗?

提前致谢。

3 个答案:

答案 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