我不知道这是否正常工作,但我尝试使用1000个线程向变量添加1。然后我打印出最后的数字以验证它是否有效,它永远不会是1000而且它也会改变。
我确定这可能是谷歌搜索的同步问题,但是当我尝试同步线程时,它仍然不是1000,而且变化但是要少很多(在995到997之间变化,而没有同步它大致在900到1000之间变化。
这是我到目前为止所做的事情:
<div id='printArr'>
<p class='card-title' style='text-align:center;margin:2px 0 -10px 0;font-size:11px'><strong>$mvalue->product_name</strong></p>
<div class='card-body text-center'>
<p class='card-title chead' style='text-align:center'>$mvalue->strength $mvalue->form</p>
<img class='' src='$base/assets/images/barcode/$mvalue->batch_no.png' alt='Card image'>
<div class='container'>
<p style='text-align:center;margin:3px 0 -5px 0;font-size:10px'>EXP:$mvalue->expire_date</p>
</div>
</div>
</div>
@media print{
#printArr {
width: 1.5in;
height: 1.0in;
box-shadow: none !IMPORTANT;
border-radius: 0 !IMPORTANT;
margin: 0;
}
.chead{
font-size: 9px !IMPORTANT;
margin-bottom: 2px;
}
#printArr img {
max-width: 100%;
text-align: center;
max-height: .8in
}
}
#printArr img {
max-width: 100%;
text-align: center;
}
我的问题是这些线程应该按照我写的方式同步吗?如果它们被同步,为什么它们在技术上是安全的,会产生不同的结果?
答案 0 :(得分:1)
System.out.println("----- " + adder.count);
- 您访问count
但synchronize
未adder
,因此不安全(也不是你等待工人完成,join()
如果你希望在打印总数之前看到最终总数,或者添加另一个循环来等待)。此外,在实际代码中,您 应该 使用AtomicInteger
。