首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用Synchronized的多线程

不使用Synchronized的多线程
EN

Stack Overflow用户
提问于 2019-07-11 20:45:46
回答 1查看 127关注 0票数 0

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

在多线程中,我知道如果我们使用synchronized关键字,它永远不会同时命中方法的所有线程,而是将它们放入队列中,让它们一个接一个地访问。

但是我的老师说,使用同步不是一个好的做法(没有时间解释为什么,但会在下一节课上问)。

以下是我的代码

代码语言:javascript
复制
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关键字...?

请提个建议...!

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-07-12 20:51:12

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

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

在main方法中有两个线程,只需启动它们。让你的列表中有大约100个值,这样你就可以看到两个线程在选择值。

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

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56989558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档