java多线程
请教大家两个图中的问题
一、下图中 主线程中有两个子线程,为什么红圈标记的System.out.println 全部没有执行呢,而且第一行输出还丢失了前面一部分
二、下图中出现了好多我不理解的问题
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 不会报错呢