java - 多线程不使用同步
问题描述
我正在学习我的实验课,多线程。
在多线程中,我知道如果我们使用synchronized
关键字,它永远不会让所有线程同时访问方法,而是将它们放入队列中,让它们一个一个地访问。
但是我的老师说,使用同步不是一个好习惯(没有时间解释为什么,但会在下节课上问)。
这是我的代码
import java.util.HashMap;
import java.util.Map;
public class Testmultithread {
static String printMe(int inp) {
return Integer.toString(inp);
}
public static void main(String[] args) {
Map<String, Integer> listofval = new HashMap<String, Integer>();
listofval.put("1", 1);
listofval.put("2", 2);
listofval.put("3", 3);
listofval.put("4", 4);
listofval.put("5", 5);
for (Map.Entry<String, Integer> entry : listofval.entrySet()) {
Testmultithread.printMe(entry.getValue());
}
}
}
请问我怎样才能在上面的代码中实现多线程(printMe
多线程级别的映射条目访问方法)而不使用synchronized
关键字...?
请给个建议...!
谢谢
解决方案
有一个只显示来自第 N 个索引的值的方法。'N' 将是静态字段级变量。
有一个带有“运行”方法的线程,该方法永远运行并执行以下操作。1) 在索引“n”中打印值。2) 增加 N。 3) 如果 N > 列表大小,则“中断”。让“N”为“原子整数”。
在 main 方法中有两个线程并启动它们。让您的列表中包含大约 100 个值,以便您可以看到两个线程选择值。
但是,这不是线程安全的,两个线程可以获得相同的“N”值。
祝你好运。
推荐阅读
- class - 如何在 ReasonML 中为 Web 组件扩展 JavaScript HTMLElement 类?
- c - 即使在关闭套接字后,服务器仍继续在客户端/服务器 C 应用程序中运行
- android - 如何防止editText与recyclerView重叠?
- python - Pandas - 按列对多级数据进行排序,但保留级别组顺序
- python - 通过将两个长度不等的列表压缩在一起来创建字典
- node.js - Angular + Electron 应用:根据桌面或网页模式查询网页 API 或数据库
- javascript - javascript的正确登录重定向
- .net - TFS 加密来自其他用户的文件
- javascript - 在 React 上保持状态
- java - Hazelcast not working correctly with SqlPredicate and Index on optional field