java - 线程未按顺序存储在集合中
问题描述
我正在尝试将 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();
}
}
当我看到 allThreads 时,线程每次都是混乱的。
解决方案
根据 HashSet 的文档
该类实现了由哈希表(实际上是 HashMap 实例)支持的 Set 接口。它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。此类允许空元素。
如果您想保留插入顺序中的元素,您可以使用例如ArrayList
或LinkedList
。
推荐阅读
- mysql - JMeter 不一致的 CommunicationsException:通信链路故障
- angular - translate.get 有时会返回键而不是翻译
- vue.js - 如何将带有翻译字符串的对象从 symfony 树枝传递到 vue 组件
- javascript - 使用 FTPS 包通过 FTP 发送文件。错误、日志和重试需要改进
- r - 创建一个循环,从前一个停止的地方开始
- reactjs - 仅导入 typescript 模块声明
- javascript - Vue 3,在设置中获取道具
- javascript - 如何过滤除 JavaScript 中的当前索引之外的对象数组?
- php - 正则表达式匹配联系人组
- javascript - RShiny:为什么 htmlOutput 会阻止 JavaScript 工作?