A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© gzbbxu 中级黑马   /  2013-6-23 12:08  /  1431 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Super_Class 于 2013-6-24 18:40 编辑

什么时候用代码块,什么时候用函数呢?
  1. public void show() {
  2.                 synchronized (ticket) {
  3.                         if (ticket.getTicket() > 0) {
  4.                                 try {
  5.                                         Thread.sleep(10);
  6.                                 } catch (InterruptedException e) {
  7.                                         // TODO Auto-generated catch block
  8.                                         e.printStackTrace();
  9.                                 }
  10.                                 System.out.println(name + "卖了一张票,票号是" + ticket.getTicket());
  11.                                 ticket.setTicket(ticket.getTicket() - 1);
  12.                         }
  13.                 }
  14.         }
复制代码
如果以上改为同步函数就不行了,打印出-1的票。。

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

2 个回复

倒序浏览
加锁的方式不一样,同步方法的锁用的this锁,而同步代码块可以指定锁。
回复 使用道具 举报
java中每个对象都有同步锁,同步方法是指进入该方法时需要获取this对象的同步锁,而同步代码块则是可以指定需要获取哪个对象的同步锁,例如:
synchronized void t(){}
void t(){
synchronized(this){
}
}
同步代码块可以用如下方式来使用:
void t(){
synchronized(lockObject){}
}
其中lockObject可以为任何不为null值的对象

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马