synchronized标记 和synchronized 方法有什么区别

yza3137957 2011-05-04 06:31:27
为什么这种程序不能实现同步呢

//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);
}
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jeelon 2011-05-05
  • 打赏
  • 举报
回复
synchronized void method{}功能上,等效于

void method{
synchronized(this)
}
}


/*synchronized {修饰代码块}的作用不仅于此,synchronized void method{}整个函数加上synchronized块,效率并不好。在函数内部,可能我们需要同步的只是小部分共享数据,其他数据,
可以自由访问,这时候我们可以用 synchronized(表达式){//语句}更加精确的控制。*/


new_bird_0001 2011-05-04
  • 打赏
  • 举报
回复
要看锁住了哪个对象,用synchronized在方法上其实是锁住了拥有这个方法的那个类的对象,用synchronized(对象)则锁住了括号里那个对象,这样其他想要同步访问你锁住的对象时,就加锁并等待

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧