| 本帖最后由 HM许涛 于 2013-4-9 23:37 编辑 
 原题见张孝祥老师Java就业培训教程P195页5.2.4程序清单:ThreadDemo6.java
 public class ThreadDemo6
 {
 public static void main(String[] args)
 {
 ThreadTest t=new ThreadTest();
 new Thread(t).start();
 try
 {
 Thread.sleep(1);
 }
 catch (Exception e)
 {
 }/**/
 t.str=new String("method");
 new Thread(t).start();
 }
 }
 class ThreadTest implements Runnable
 {
 private int tickets=100;
 String str=new String(" ");
 public void run()
 {
 if(str.equals("method"))
 {
 while(true)
 {
 sale();
 }
 }
 else
 {
 synchronized(str)
 {
 if(tickets>0)
 {
 try
 {
 Thread.sleep(10);
 }
 catch (Exception e)
 {
 System.out.println(e.getMessage());
 }
 System.out.println(Thread.currentThread().getName()+"is saling aqaa   ticket "+tickets--);
 }
 }
 }
 }
 
 public synchronized void sale()
 {
 if(tickets>0)
 {
 try
 {
 Thread.sleep(10);
 }
 catch (Exception e)
 {
 System.out.println(e.getMessage());
 }
 System.out.println(Thread.currentThread().getName()+"is saling ticket "+tickets--);
 }
 }
 }
 这个例子调试了好多次,也百度了synchronized的语法,但是总是出不了书上写的效果,总是两个线程都调用sale方法,哪位大神帮忙看一下是哪里有问题?
 书上给的效果应该是两个线程分别调用同步函数和同步代码块,并且最后一个线程打印结果为0.即两个没有同步。最后需要将STR替换成THIS才能实现同步。
 |