为什么这种程序不能实现同步呢//Thread类run方法
public void run() {
buy(commodity);
}
public synchronized void buy(int commodity){
Shop.allCommodity = Shop.allCommodity - commodity;
System.out.println(Thread.currentThread().getName() + "购买了" + commodity
+ "件商品" + "剩余" + Shop.allCommodity);
}
为什么这种程序能实现同步
//Thread类run方法
public void run() {
synchronized(对象){
buy(commodity);
}
}public void buy(int commodity){
Shop.allCommodity = Shop.allCommodity - commodity;
System.out.println(Thread.currentThread().getName() + "购买了" + commodity
+ "件商品" + "剩余" + Shop.allCommodity);
}
public void run() {
buy(commodity);
}
public synchronized void buy(int commodity){
Shop.allCommodity = Shop.allCommodity - commodity;
System.out.println(Thread.currentThread().getName() + "购买了" + commodity
+ "件商品" + "剩余" + Shop.allCommodity);
}
为什么这种程序能实现同步
//Thread类run方法
public void run() {
synchronized(对象){
buy(commodity);
}
}public void buy(int commodity){
Shop.allCommodity = Shop.allCommodity - commodity;
System.out.println(Thread.currentThread().getName() + "购买了" + commodity
+ "件商品" + "剩余" + Shop.allCommodity);
}
synchronized(this)
}
}
/*synchronized {修饰代码块}的作用不仅于此,synchronized void method{}整个函数加上synchronized块,效率并不好。在函数内部,可能我们需要同步的只是小部分共享数据,其他数据,
可以自由访问,这时候我们可以用 synchronized(表达式){//语句}更加精确的控制。*/