最近在看张孝祥的视频教程,其中在讲进程的时候有这样一个例子,原代码是这样的:
import java.*;
import java.lang.Thread.*;
import java.lang.*;class ThreadDemo {
public static void main(String[] args)
{
TestThread tt = new TestThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}
}
class TestThread implements Runnable 
{
public void run()
{
int tickets=100;
String str = new String("");
while(true)
{
synchronized(str)
{
if(tickets>0)
{
try{ Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"is selling ticket "+tickets--);
}
}
}
}
}
他在演示时可以实现4个进程对同一个tickets进行操作,也就是说当前一个进程调用了tickets后它的值为5,那么紧接着的下一个进程调用时就是在5的基础上。
但是我在自己电脑上调试时,却达不到这个效果,我运行后的结果是;4个进程各自调用一个tickets,也就是总共调用了4个tickets,并未达到调用同一个tickets。
这个例子的实际问题是车站买票问题。
想请教各位高手这是为什么,为什么达不到他演示时的效果?是不是JDK版本不一样,Runnable接口的实现也不一样?