public class TicketSystem
{
public static void main(String[] args)
{
SellTicket st = new SellTicket();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}class SellTicket implements Runnable
{
int ticket = 0;
Object obj = new Object();
public void run()
{
while(ticket < 100)
{
synchronized(this)
{
//if(ticket < 100)
//{
try{
Thread.sleep(10);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
" sell the "+ticket+"th ticket");
ticket++;
//}
//else
//break;
}
//sell();
}
}
}
为什么打印的票数是102张
而
public class TicketSystem
{
public static void main(String[] args)
{
SellTicket st = new SellTicket();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}class SellTicket implements Runnable
{
int ticket = 0;
Object obj = new Object();
public void run()
{
while(true)
{
synchronized(this)
{
if(ticket < 100)
{
try{
Thread.sleep(10);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
" sell the "+ticket+"th ticket");
ticket++;
}
//else
//break;
}
//sell();
}
}
}
结果是正确的?
{
public static void main(String[] args)
{
SellTicket st = new SellTicket();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}class SellTicket implements Runnable
{
int ticket = 0;
Object obj = new Object();
public void run()
{
while(ticket < 100)
{
synchronized(this)
{
//if(ticket < 100)
//{
try{
Thread.sleep(10);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
" sell the "+ticket+"th ticket");
ticket++;
//}
//else
//break;
}
//sell();
}
}
}
为什么打印的票数是102张
而
public class TicketSystem
{
public static void main(String[] args)
{
SellTicket st = new SellTicket();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}class SellTicket implements Runnable
{
int ticket = 0;
Object obj = new Object();
public void run()
{
while(true)
{
synchronized(this)
{
if(ticket < 100)
{
try{
Thread.sleep(10);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
" sell the "+ticket+"th ticket");
ticket++;
}
//else
//break;
}
//sell();
}
}
}
结果是正确的?
这是个同步的语句块,就是让不同的线程只能一个一个的访问这段代码!
那样就不会出显票买出负数的情况
中的 this 指什么?
中的 this 指什么?-------------------
this是一个对象,一般用Object对象就可以,不为空时执行!