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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1961993790 中级黑马   /  2013-10-24 08:20  /  1086 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 1961993790 于 2013-10-25 08:52 编辑

class Ticket implements Runnable//extends Thread
{
private int num = 100;
Object obj = new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+".....sale...."+num--);
}
}
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
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();
}
}
为什么加上synchronized(obj){}就能实现线程同步,而synchronized(new Object()){}怎么就不行呢?
郁闷!

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

2 个回复

倒序浏览
同步的2各前提:
1,必须是多线程。
2,必须是使用同一把锁。

如果你使用new Object()作为锁的话,每判断一次锁,你就创建一个对象,这样使用的就不是同一个锁了。

希望对你有帮助!{:soso_e141:}

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

如果未解决请继续提问,谢谢合作

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马