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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class ThreadDemo {
public static void main(String[] args) {
  // TODO Auto-generated method stub
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
  
  
}
}
class Ticket implements Runnable {
private  int ticket = 100;
Ticket(){ }
public void run(){
  while(true){
   Object obj = new Object();
   synchronized (obj)
   {
    if(ticket>0)
    {
     try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}      // TODO Auto-generated catch block     
     System.out.println(Thread.currentThread().getName()+"..."+ticket--);
    }
   }
   
  }
  
}
}

5 个回复

倒序浏览
  Object obj = new Object();写错位置了,每循环一次就建一个新的obj,每次的锁都不一样
回复 使用道具 举报
天黑偷牛 发表于 2014-8-27 22:13
Object obj = new Object();写错位置了,每循环一次就建一个新的obj,每次的锁都不一样 ...

恩 ,把 Object obj = new Object(); 这句写在循环外面就解决了,谢谢!
回复 使用道具 举报
还可以将 synchronized(obj)改写为  synchronized (this) 这样就解决了最后的输出结果的非预期结果
回复 使用道具 举报
  汗 毕老师就拿这个做示例过的 每次锁都不是同一个 肯定不行了
回复 使用道具 举报
左脑想你 来自手机 中级黑马 2014-8-28 09:35:46
地板
每一次都是新的锁~~对象~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马