本帖最后由 Emperors 于 2014-4-16 23:26 编辑
题目:
多个线程同时出票,保证每张出票的编号连续且不重复。
public class Demo{
public static void main(String args [])
{
SellTicket st1=new SellTicket();
st1.setName("线程1");
SellTicket st2=new SellTicket();
st2.setName("线程2");
SellTicket st3=new SellTicket();
st3.setName("线程3");
st1.start();
st2.start();
st3.start();
}
}
public class SellTicket extends Thread
{
private static int sd=0;
public void run()
{
for(int i=0;i<20;i++)
{
sell();
}
}
public synchronized void sell()
{
sd++;
System.out.println(currentThread().getName()+"买票"+"sd"+sd);
}
}
编译可以通过,运行结果如下:线程1买票sd2
线程2买票sd2
线程1买票sd3
线程2买票sd4
线程1买票sd5
线程2买票sd7
线程1买票sd8
线程3买票sd8
线程2买票sd9
线程1买票sd10
线程3买票sd11
线程2买票sd12
线程1买票sd13
线程3买票sd14
线程2买票sd15
线程1买票sd16
线程3买票sd17
线程2买票sd18
线程1买票sd19
线程3买票sd20
线程2买票sd21
线程1买票sd22
线程3买票sd23
线程2买票sd24
线程1买票sd25
线程3买票sd26
线程2买票sd27
线程1买票sd28
线程3买票sd29
线程2买票sd30
线程1买票sd31
线程3买票sd32
线程2买票sd33
线程1买票sd34
线程3买票sd35
线程2买票sd36
线程1买票sd37
线程3买票sd38
线程2买票sd39
线程1买票sd40
线程3买票sd41
线程2买票sd42
线程1买票sd43
线程3买票sd44
线程2买票sd45
线程1买票sd46
线程3买票sd47
线程2买票sd48
线程1买票sd49
线程3买票sd50
线程2买票sd51
线程1买票sd52
线程3买票sd53
线程2买票sd54
线程1买票sd55
线程3买票sd56
线程2买票sd57
线程3买票sd58
线程3买票sd59
线程3买票sd60
我认为原因是synchronized 没有锁住sell()方法,但是不知道为什么呢请大神解析,谢谢!
synchronized 修饰sell() 就不会出现呢线程1买票sd2
线程2买票sd2
|
|