本帖最后由 土突突 于 2014-4-27 12:10 编辑
- class ThreadDemo
- {
- public static void main(String[] args)
- {
- Test t=new Test();
- Thread th1=new Thread(t);
- Thread th2=new Thread(t);
- th1.start();
- try{Thread.sleep(10);} catch(Exception e){}
- t.flag=false;
- th2.start();
- }
- }
- class Test implements Runnable
- {
- boolean flag=true;
- int ticket=100;
- Object o=new Object();
- public void run()
- {
- if(flag)
- {
- while(true)
- {
- synchronized(o)
- {
- if(ticket>0)
- {
- try{Thread.sleep(10);} catch(Exception e){}
- System.out.println("ticket synchronized-------"+(ticket--));
- }
- }
- }
- }
- else
- {
- while(true)
- show();
- }
- }
- public synchronized void show()
- {
- if(ticket>0)
- {
- try{Thread.sleep(10);} catch(Exception e){}
- System.out.println("ticket void show()---"+(ticket--));
- }
- }
-
- }
复制代码 发现一个问题,每次我写成synchronized(o)时即使出现打印不合理的情况,但每次两个线程都能保证交替执行,可是当我换成正确情况synchronized(this)的时候,虽然打印正确,但每次都是一个线程在运行。我都试了n次了,一直没有出现两个线程交替执行的情况。要么是一直在打印ticket synchronized-------,要么是前半部分打印ticket synchronized-------,后半部分打印ticket void show()---,是不是我哪写错了还是我的电脑真给我杠上了,求解答......
|