对于一个数组想要初始一样的值,我们经常会这样编写。全部进行复制1,但是你有没有考虑过,如果是一个对象数组呢?
如果也是new Thread,这个是有五个线程,还是一个线程?
这是我在今天做哲学家问题时候遇到的
最后dug后返现只有一个信号量。
底层原因
可以发现Arrays.fill() 本质就是等于复制,所有的a都是共享的一个val,那么也就不难理解了,为什么会出现这样的问题。你只是new了一个线程,这个线程数组里面的线程都指向了这个地址。
正确的写法应该是这样的
对于一个数组想要初始一样的值,我们经常会这样编写。全部进行复制1,但是你有没有考虑过,如果是一个对象数组呢?
如果也是new Thread,这个是有五个线程,还是一个线程?
这是我在今天做哲学家问题时候遇到的
最后dug后返现只有一个信号量。
可以发现Arrays.fill() 本质就是等于复制,所有的a都是共享的一个val,那么也就不难理解了,为什么会出现这样的问题。你只是new了一个线程,这个线程数组里面的线程都指向了这个地址。
正确的写法应该是这样的