黑马程序员技术交流社区
标题:
毕老师视频 关于线程安全
[打印本页]
作者:
吹血弄花
时间:
2014-4-12 01:52
标题:
毕老师视频 关于线程安全
本帖最后由 吹血弄花 于 2014-4-12 20:49 编辑
class Ticket implements Runnable
{
private static int tick=100;
Object obj=new Object();
public void run()
{
while(true)
{
synchronized (obj)
{
if(tick>0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
}
System.out.println(Thread.currentThread().getName()+"sale:"+tick--);
}
}
}
}
}
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);
/*
Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();*/
t1.start();
t2.start();
t3.start();
t4.start();
}
}
照着教程一步步敲出来的,为什么我的只有0线程打印啊?教程中是4个线程都打印的。
作者:
Tking
时间:
2014-4-12 02:13
这是个人电脑问题,你多尝试几次,就会看见并发了,并发存在很多因素,很难很好的掌控
作者:
skyfly
时间:
2014-4-12 03:45
t1.start(); 修改成 t1.start();
t2.start(); t1.yield();
t3.start(); t2.start();
t3.start(); t3.start();
t4.start(); t4.start();
由于线程是由CPU随机抢夺执行权的 所以你也可以多执行几次该程序 也能看到其他线程了
t4.start();
作者:
向日葵的曙光
时间:
2014-4-12 08:48
CUP会抢资源执行,抢夺的机会是随机的,多运行几次或许就能出线别的结果了,或者将Tickets的值取大一点1000或者10000
还可以让休眠的时间加长,改为1000
作者:
吹血弄花
时间:
2014-4-12 20:45
哦哦,我还以为是java版本差异,谢谢各位
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2