| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 589 人关注过本帖
标题:代码如下,想问下为什么第二个线程不能得到时间片!
只看楼主 加入收藏
george_vcool
Rank: 2
等 级:新手上路
威 望:3
帖 子:453
专家分:0
注 册:2007-7-23
结帖率:100%
收藏
 问题点数:0 回复次数:2 
代码如下,想问下为什么第二个线程不能得到时间片!

class TickCheck{
public static void main(String[] args){
SellThread x=new SellThread();

new Thread(x).start();
try{ Thread.sleep(1);}catch(InterruptedException e){}
x.b=true;
new Thread(x).start();
}
}


class SellThread implements Runnable{
int ticket=1000;
Object o=new Object();
boolean b=false;
public void run(){
if (b)
sell();
else{
synchronized(this){
while(ticket>0){

System.out.println(Thread.currentThread().getName()+" "+ticket);
ticket--;
}
}

}
}
public synchronized void sell(){
while(ticket>0){
System.out.println("sell:"+Thread.currentThread().getName()+" "+ticket);
ticket--;

}
}

搜索更多相关主题的帖子: 线程 代码 时间 
2007-08-22 01:40
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
你的第一个线程启动后,判断b的真假,无论真假都会进入循环,而且你的循环还在锁里,直到循环结束锁才打开.而这个时候ticket已经为0了。线程2就没有打印了 .
2007-08-22 09:20
liguoshi1984
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-7-4
收藏
得分:0 
synchronized方法和语句块是互斥的,每次只能有一个线程访问,直到同步方法或语句块运行完毕.
2007-08-27 15:48
快速回复:代码如下,想问下为什么第二个线程不能得到时间片!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034021 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved