首页 > 解决方案 > 多线程不使用同步

问题描述

我正在学习我的实验课,多线程。

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

请给个建议...!

谢谢

标签: javamultithreadingsynchronized

解决方案


有一个只显示来自第 N 个索引的值的方法。'N' 将是静态字段级变量。

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

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

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

祝你好运。


推荐阅读