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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 122125241 中级黑马   /  2015-7-3 21:18  /  648 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package cn.itcast_11;
  2. /*
  3. * A:同步代码块的锁对象是谁呢?
  4. *                 任意对象。
  5. *
  6. * B:同步方法的格式及锁对象问题?
  7. *                 格式:把同步关键字加在方法上。
  8. *
  9. *                 同步方法锁对象是谁呢?
  10. *                         默认this
  11. *
  12. * C:静态方法及锁对象问题?
  13. *                 静态方法的锁对象是谁呢?
  14.             默认当前类的Class文件
  15. *                         类的字节码文件对象。(反射会讲)
  16. public class SellTicket implements Runnable {
  17.         // 定义100张票
  18.         private static int tickets = 100;
  19.         // 定义同一把锁
  20.         private Object obj = new Object();
  21.         private Demo d = new Demo();
  22.         private int x = 0;
  23.        
  24.         @Override
  25.         public void run() {
  26.                 while (true) {
  27.                         if(x%2==0){
  28.                                 synchronized (obj) {
  29.                                         if (tickets > 0) {
  30.                                                 try {
  31.                                                         Thread.sleep(100);
  32.                                                 } catch (InterruptedException e) {
  33.                                                         e.printStackTrace();
  34.                                                 }
  35.                                                 System.out.println(Thread.currentThread().getName()
  36.                                                                 + "正在出售第" + (tickets--) + "张票 ");
  37.                                         }
  38.                                 }
  39.                         }else {
  40.                                 sellTicket();//默认的对象时this
  41.                         }
  42.                         x++;
  43.                 }
  44.         }
  45.        
  46.         //如果一个方法一进去就看到了代码被同步了,那么我就把这个同步加在方法上
  47.         private static synchronized void sellTicket() {
  48.                 if (tickets > 0) {
  49.                 try {
  50.                                 Thread.sleep(100);
  51.                 } catch (InterruptedException e) {
  52.                                 e.printStackTrace();
  53.                 }
  54.                 System.out.println(Thread.currentThread().getName()
  55.                                         + "正在出售第" + (tickets--) + "张票 ");
  56.                 }
  57. }
  58. }
复制代码


2 个回复

正序浏览

坚持到无能为力,努力到感动自己
回复 使用道具 举报
菜鸟飘过      
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马