我正在练习多线程。
在多线程中,我知道如果我们使用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
关键字...?
请提出建议...!
谢谢
答案 0 :(得分:0)
有一个仅显示第N个索引中的值的方法。 “ N”将是静态字段级变量。
有一个带有'run'方法的线程,该线程将永远运行并执行以下操作。 1)在索引“ n”中打印值。 2)增量N。 3)如果N>列表大小,则“中断”。 假设“ N”为“原子整数”。
在main方法中有两个线程,只需启动它们即可。让您的列表中包含约100个值,以便您可以看到两个线程在选择值。
但是,这不是线程安全的,两个线程可以得到相同的'N'值。
祝你好运。