我正在复习我的实验课,多线程。
在多线程中,我知道如果我们使用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关键字...?
请提个建议...!
谢谢
发布于 2019-07-12 20:51:12
我有一个只显示第N个索引中的值的方法。“n”将是静态字段级变量。
有一个带有'run‘方法的线程,它永远运行并执行以下操作。1)打印索引'n‘中的值。2)增量N。3)如果N>列表大小,则“中断”。设'N‘为’原子整数‘。
在main方法中有两个线程,只需启动它们。让你的列表中有大约100个值,这样你就可以看到两个线程在选择值。
但是,这不是线程安全的,并且两个线程可以获得相同的'N‘值。
祝好运。
https://stackoverflow.com/questions/56989558
复制相似问题