黑马程序员技术交流社区
标题:
关于毕老师视频代码中锁的疑问?问题在题中。
[打印本页]
作者:
王广亚
时间:
2013-8-25 13:11
标题:
关于毕老师视频代码中锁的疑问?问题在题中。
本帖最后由 王广亚 于 2013-8-25 15:02 编辑
class Ticket implements Runnable{
private int tick=1000;
String name;
Object obj=new Object();
// @Override
public Ticket(String name){
this.name=name;
}
public void run() {
System.out.println(Thread.currentThread().getName()+"----------------");
while(true){
synchronized(obj){
if(tick>0){ //<font color="red">问题:此处问什么要加个if判断语句,既然有while语句为何不把这个位置的if语句替换成while(tick>0)。而把上面的while去掉呢?</font>
try{
Thread.sleep(12);
}catch(Exception e){}
System.out.println(this.getName()+"号列车"+Thread.currentThread().getName()+". ..sale"+tick--);
}
}
}
}
private String getName() {
// TODO Auto-generated method stub
return name;
}
}
public class TickeDemo {
public static void main(String[] args) {
Ticket t=new Ticket("-k2038-");//
Thread t1=new Thread(t,"-001窗口");
Thread t2=new Thread(t,"-002窗口");
Thread t3=new Thread(t,"-003窗口");
Thread t4=new Thread(t,"-004窗口");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
复制代码
作者:
~路@人#甲~
时间:
2013-8-25 13:48
你的意思如果是以下这样?那么就会导致只有一个线程在执行,其他线程进不来!
synchronized(obj){
while(tick>0){
try{
Thread.sleep(12);
}catch(Exception e){}
System.out.println(this.getName()+"号列车"+Thread.currentThread().getName()+". ..sale"+tick--);
}
}
}
如果是下边这样,这会导致线程的不安全,如果在tick=1时所有的线程都进入了while语句内,就会导致负数的出现!
while(tick>0){
synchronized(obj){
try{
Thread.sleep(12);
}catch(Exception e){}
System.out.println(this.getName()+"号列车"+Thread.currentThread().getName()+". ..sale"+tick--);
}
}
作者:
张聪珉
时间:
2013-8-25 13:52
首先你要明白同步代码块是放多个线程共同操作的数据,也是是多个窗口卖票,再来,if和while语句的区别是
if语句只执行一次,如果t1线程,进来了就拿到了锁,假如ticket>0,卖了一张票,执行完if语句后,就释放了锁,让别的线程进来,当然也有可能是t1线程自己又进来一次,
而这里如果你用while语句的话意思就是有一个线程进来之后,就会一直循环卖票,直到把票卖完,才出去,那这样自,就只是单线程卖票而不是多线程卖票,
把while定义在外面目的是为了让多个线程都在while语句里面循环,而不是只执行一次线程就 结束
作者:
javamov
时间:
2013-8-25 14:27
这个位置的if语句替换成while(tick>0)。而把上面的while去掉呢?
如果if语句替换成while(tick>0),而把上面的while去掉;这样和单线程没什么区别。
作者:
薛鹏鹏
时间:
2013-8-25 14:35
如果您的问题已经解决
请更改分类未解决为已解决
保持队形,谢谢合作
详情参考
如何修改分类
作者:
王广亚
时间:
2013-8-25 15:02
谢各位。very good!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2