SC&KD 2023-08-26 23:28 采纳率: 12.5%
浏览 5
已结题

java多线程、synchronized、hashcode问题

java多线程
请教大家两个图中的问题
一、下图中 主线程中有两个子线程,为什么红圈标记的System.out.println 全部没有执行呢,而且第一行输出还丢失了前面一部分

img

二、下图中出现了好多我不理解的问题
2.1、为什么将run 中循环删除list的代码注释掉以后图一中的控制台输出全部打印出来了。
2.2、为什么线程类中synchronized(list) 这个锁为什么必须使用 list 下图控制台输出可以看到 不管是this 还是list 输出的hashcode 值都是一样的(这里发现用不同构造方法new 出来的线程对象hashcode是相对相等的,按道理不管是否是相同够着方法,每次构造出来的类 this.hashcode 不应该相等才对啊这又是为什么呢),回到线程锁为什么用this 作为锁不行,按道理来说锁的对象只要是相等的就是会锁住用“1”也是可以的,那为什么用相等的this。hashcode不行,而list.hashcode又可以
2.3、list1.hashcode 是不一样的,因为主线程是new 了两次线程类 被创建了两次,而list由于被构造方法赋值,主线程中传递的是同一个list 所以hashcode是同一个我还能理解,但是为什么list1.hashcode 也是相等的 为1 下图中没有输出为了看第四个问题的日志
2.4、可以看到run中最后一行输出是System.out.println(name+"list="+list.hashCode()); 这行代码进行了报错提示 Exception in thread "Thread-1" Exception in thread "Thread-0" java.lang.NullPointerException,这里为什么加了name线程名称就会报空 而上面一行System.out.println("list="+list.hashCode());这行不加name 同样输出 list.hashcode 不会报错呢

img

  • 写回答

2条回答 默认 最新

  • Code Writers 全栈领域新星创作者 2023-08-27 09:07
    关注

    线程操作不能保证原子性

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月9日
  • 专家已采纳回答 9月1日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音