6

在 Java 7 中使用 nio.2,当您创建这样的监视服务时:

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

然后,启动后台线程,在无限循环中轮询文件系统事件。该线程的名称是“Thread-n”,在调查线程转储或分析会话期间有点麻烦。

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

4

1 回答 1

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);
于 2013-08-08T15:50:02.287 回答