多线程而不使用同步

时间:2019-07-11 12:45:46

标签: java multithreading synchronized

我正在练习多线程。

在多线程中,我知道如果我们使用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关键字...?

请提出建议...!

谢谢

1 个答案:

答案 0 :(得分:0)

有一个仅显示第N个索引中的值的方法。 “ N”将是静态字段级变量。

有一个带有'run'方法的线程,该线程将永远运行并执行以下操作。 1)在索引“ n”中打印值。 2)增量N。 3)如果N>列表大小,则“中断”。 假设“ N”为“原子整数”。

在main方法中有两个线程,只需启动它们即可。让您的列表中包含约100个值,以便您可以看到两个线程在选择值。

但是,这不是线程安全的,两个线程可以得到相同的'N'值。

祝你好运。