看來這種方法的最簡單的解決方案實際上是延長線程 - 從不想過我會看到那一天。
正如PT已經說過線程ID只唯一隻要線程是活動的,他們可以和大多數肯定會被操作系統重用。
所以不是這樣做的通過這種方式,您可以使用可在施工中指定的螺紋名稱,並使其變得簡單,只需編寫一個小類:
public class MyThread extends Thread {
private static long ID = 0;
public MyThread(Runnable r) {
super(r, getNextName());
}
private static synchronized String getNextName() {
// We can get rid of synchronized with some AtomicLong and so on,
// doubt that's necessary though
return "MyThread " + ID++;
}
}
然後,你可以做這樣的事情:
public static void main(String[] args) throws InterruptedException {
Thread t = new MyThread(new Runnable() {
@Override
public void run() {
System.out.println("Name: " + Thread.currentThread().getName());
}
});
t.start();
}
您必須覆蓋要使用,並始終使用MyThread
類的所有構造函數,但這樣一來就可以保證一個獨特的映射 - 以及至少2^64-1(畢竟,負值也很好),這應該足夠了。
雖然我仍然不認爲這是最好的辦法,可能是更好的創建一個包含所有必要的信息,並能儘快,因爲它是不再需要清理的文件中有一些「工作」類 - 這樣,你也可以輕鬆使用ThreadPools和co,其中一個線程將執行多個任務。目前你的業務邏輯處於一個線程中 - 這並不會讓我成爲特別好的設計。
來源
2011-09-24 14:18:18
Voo
我知道這些可能性,但應用程序處理大量數據,因此在線程退出之前它可能會耗盡磁盤空間。 – PNS
程序如何知道它何時不再需要每個臨時文件?如果存儲似乎成爲問題,爲什麼要關心組織它們? – CurtisB
它對文件進行一些處理,然後可以處置它。我只需要按照我所述將它們組織到目錄中,然後處理它們,然後擦除整個目錄。 – PNS