class TicketsSystem
{
public static void main(String[] args)
{
SellThread st=new SellThread();
new Thread(st).start();
try
{
Thread.sleep(1);
}
catch(Exception e)
{
e.printStackTrace();
}
st.b=true;
new Thread(st).start();
}
}
class SellThread implements Runnable
{
int tickets=10;
Object obj=new Object();
boolean b=false;
public void run()
{
if(b==false)
{
while(true)
sell();
}
else
{
while(true)
{
synchronized(obj)
{
try
{
Thread.sleep(10);
}
catch(Exception e)
{
e.printStackTrace();
}
if(tickets>0)
{
System.out.println("obj:"+Thread.currentThread().getName()+
" sell tickets:"+tickets);
tickets--;
}
}
}
}
}
public synchronized void sell()
{
if(tickets>0)
{
try
{
Thread.sleep(10);
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("sell():"+Thread.currentThread().getName()+" sell tickets:"+tickets);
tickets--;
}
}
}
结果sell():Thread-0 sell tickets:10
obj:Thread-1 sell tickets:9
sell():Thread-0 sell tickets:8
obj:Thread-1 sell tickets:7
sell():Thread-0 sell tickets:6
obj:Thread-1 sell tickets:5
sell():Thread-0 sell tickets:4
obj:Thread-1 sell tickets:3
sell():Thread-0 sell tickets:2
obj:Thread-1 sell tickets:1
sell():Thread-0 sell tickets:0而且好像结果打印出来的语句 obj sell tickets与
sell(): sell tickets是交替出现的
为什么会打印出(线程名+sell tickets:0)来?
当执行完线程1的时候b=true;可为什么还会继续执行sell():Thread-0 sell tickets:0呢
{
public static void main(String[] args)
{
SellThread st=new SellThread();
new Thread(st).start();
try
{
Thread.sleep(1);
}
catch(Exception e)
{
e.printStackTrace();
}
st.b=true;
new Thread(st).start();
}
}
class SellThread implements Runnable
{
int tickets=10;
Object obj=new Object();
boolean b=false;
public void run()
{
if(b==false)
{
while(true)
sell();
}
else
{
while(true)
{
synchronized(obj)
{
try
{
Thread.sleep(10);
}
catch(Exception e)
{
e.printStackTrace();
}
if(tickets>0)
{
System.out.println("obj:"+Thread.currentThread().getName()+
" sell tickets:"+tickets);
tickets--;
}
}
}
}
}
public synchronized void sell()
{
if(tickets>0)
{
try
{
Thread.sleep(10);
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("sell():"+Thread.currentThread().getName()+" sell tickets:"+tickets);
tickets--;
}
}
}
结果sell():Thread-0 sell tickets:10
obj:Thread-1 sell tickets:9
sell():Thread-0 sell tickets:8
obj:Thread-1 sell tickets:7
sell():Thread-0 sell tickets:6
obj:Thread-1 sell tickets:5
sell():Thread-0 sell tickets:4
obj:Thread-1 sell tickets:3
sell():Thread-0 sell tickets:2
obj:Thread-1 sell tickets:1
sell():Thread-0 sell tickets:0而且好像结果打印出来的语句 obj sell tickets与
sell(): sell tickets是交替出现的
为什么会打印出(线程名+sell tickets:0)来?
当执行完线程1的时候b=true;可为什么还会继续执行sell():Thread-0 sell tickets:0呢
解决方案 »
- 菜鸟求助。希望能给个思路。或代码注释、
- JPanel 的paintComponent()调用问题
- BigDecimal 小问题
- 迭代器Iterator 取出set中的元素,有没有什么顺序的?
- 使用myEclipse 出现的错误请各们仁兄帮助
- 关于retroguard的问题,请高手指教
- panel的标题的换行
- 关于“.”目录和构造器
- JDK读码的疑问 O-O问题 ArrayList的原理 非高手勿扰!
- 给点概念就好,1:用java能不能启动系统中的其它文件;2:用java能不能,如何实现多进程间的通信?谢谢各位高人
- 关于java.io 类 PrintWriter
- 一个关系JS解析 XML的问题!!!急,急
这种情况了