(Java 7 NIO.2)监视服务线程的自定义名称

时间:2013-08-08 15:35:01

标签: java nio java-7

在Java 7中使用nio.2时,创建类似的监视服务:

WatchService watcher = FileSystems.getDefault().newWatchService();

然后,启动后台线程,在无限循环内轮询文件系统事件。此线程的名称是“Thread-n”,在调查线程转储或分析会话期间这有点令人讨厌。

我们可以更改该线程的名称吗?

1 个答案:

答案 0 :(得分:2)

看一下实现,似乎不可能直接实现。如果你不介意一点hack,你可以找到该线程并重命名。

类似(// TODO:放错误检查):

Set<Thread> threadsBefore = Thread.getAllStackTraces().keySet();
WatchService ws = FileSystems.getDefault().newWatchService();

//I don't need to wait here on my machine but YMMV

Set<Thread> threadsAfter = Thread.getAllStackTraces().keySet();
threadsAfter.removeAll(threadsBefore);
Thread wsThread = threadsAfter.toArray(new Thread[1])[0];

System.out.println("wsThread = " + wsThread);

wsThread.setName("WatchService Thread");

Set<Thread> justChecking = Thread.getAllStackTraces().keySet();
System.out.println("justChecking = " + justChecking);