多线程同步问题请教
在孙鑫老师的视频中有一个售火车票的例子,如下:
public class TicketsSystem
{
public static SellTeckets sTeckets = new SellTeckets();
public static Thread thread1 = null;
public static void main(String[] args)
{
Thread thread = new Thread(sTeckets);
thread1 = new Thread(sTeckets);
thread.start();
thread1.start();
}
}
class SellTeckets implements Runnable
{
int tickets = 80;
Object object = new Object();
public void run()
{
while(true)
{
synchronized (object)
{
try
{
Thread.sleep(200);
}
catch (Exception e)
{
e.printStackTrace();
}
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + ":" + tickets);
tickets --;
}
}
}
}
}
运行结果如下:
Thread-0:100
Thread-1:99
Thread-0:98
......
Thread-0:4
Thread-1:3
Thread-0:2
Thread-1:1
显示了Thread-0和Thread-1两个线程名,在同步操作tickets变量。
我另外写了一个类,在此类中利用TicketsSystem.sTeckets建立一个新的线程:
public class Test1
{
public static void main(String [] args)
{
System.out.println(TicketsSystem.thread1);
if(TicketsSystem.thread1 != null)
{
TicketsSystem.thread1.start();
}
}
}
之后我注释掉TicketsSystem类中的thread1.start();,然后先运行TicketsSystem,在TicketsSystem未结束前再启动Test1类结果显示:
TicketsSystem.thread1的值为null;
我的目的是测试两个类,同步操作tickets变量,模拟实际火车票的售票。