黑马程序员技术交流社区

标题: 同步函数和同步代码块的区别。 [打印本页]

作者: gzbbxu    时间: 2013-6-23 12:08
标题: 同步函数和同步代码块的区别。
本帖最后由 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的票。。
作者: 280270738    时间: 2013-6-23 15:55
加锁的方式不一样,同步方法的锁用的this锁,而同步代码块可以指定锁。
作者: likairoudou    时间: 2013-6-23 21:53
java中每个对象都有同步锁,同步方法是指进入该方法时需要获取this对象的同步锁,而同步代码块则是可以指定需要获取哪个对象的同步锁,例如:
synchronized void t(){}
void t(){
synchronized(this){
}
}
同步代码块可以用如下方式来使用:
void t(){
synchronized(lockObject){}
}
其中lockObject可以为任何不为null值的对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2