【发布时间】:2023-03-08 23:30:01
【问题描述】:
我正在尝试将 10 个线程添加到一个集合中并按顺序命名它们。但是当我调试查看集合时,线程不是按顺序存储的。谁能告诉我我做错了什么?
Set<Thread> allThreads = new HashSet<Thread>();
final DemoClass demo = new DemoClass();
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(new Runnable() {
public void run() {
try {
demo.getName();
} catch (InterruptedException ie) {
System.out.println("We have a problem");
}
}
});
thread.setName("Thread_" + (i + 1));
allThreads.add(thread);
}
for (Thread t : allThreads) {
t.start();
}
for (Thread t : allThreads) {
t.join();
}
}
当我看到所有线程时,线程每次都是混乱的。
【问题讨论】:
-
集合不需要以任何特定顺序存储线程。如果您希望线程按添加顺序排列,请使用列表。
-
这里似乎没有任何理由使用
HashSet,反正你保证没有重复,所以你只是增加了额外的开销 -
在 PiRocks 之上说,如果你真的必须使用 Set,请选择一个已订购的,如
TreeSet(任何实现SortedSet) -
TreeSet 将按元素的自然顺序排序,据我了解问题,顺序应该是插入顺序,而不是自然顺序。
标签: java multithreading threadpool hashset reentrantlock