qq_45732008 2022-09-22 02:15 采纳率: 89.1%
浏览 18
已结题

关于java synchronized关键字的问题


public static void  test (){
int a=1;

for (List b:list){
  a++;
}

}

我现在想要把集合改成并行流的方法,会出现线程安全问题,所以想给a加一个关键字但是我直接把a++加上代码块不知道关键字后面的小括号里应该写什么

  • 写回答

4条回答 默认 最新

  • Tomshidi 2022-09-22 02:44
    关注

    可以直接在方法声明上加synchronized,但是因为是static方法,这会导致锁住整个类的static方法。如果你只想锁住a++这一段,那么你需要在类中定义一个static变量,然后synchronized(静态变量)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    qq_45732008 2022-09-22 03:43

    但是定义一个类的变量我多次调用就不是从1开始了,在这个方法里能定义吗

    回复
    Tomshidi 回复 qq_45732008 2022-09-22 06:02

    并不是让你把计数变量做为static变量,而是单纯创建一个用来做锁的资源,比如直接:private static final Object lock = new Object()

    回复
查看更多回答(3条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月22日
  • 创建了问题 9月22日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部