一个关于多线程的安全问题.一个多窗口同时买票的程序.为什么用同步代码块解决多线程安全问题的时候,在创建Object对象的两个位置输出结果不一样呢?放在位置1能解决安全性问题,而在位置2创建Object对象不能解决安全性问题呢?代码如下,求各位大神指点迷津!谢谢~~~
class Ticket implements Runnable
{
private static int tick=100;
Object obj=new Object();//创建Object对象位置1
public void run()
{
while(true)
{
//Object obj=new Object();创建Object对象位置2
synchronized(obj)
{
if (tick>0)
{
try
{
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+"...sale.."+tick--);
}
catch (Exception e)
{
System.out.println("错误了!!");
}
System.out.println(Thread.currentThread().getName()+"...sale.."+tick--);
}
}
}
}
}
class TicketDemo2
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
} |
|