/*
* 多线程售票
* */
package azhu;
//票类
class Ticket implements Runnable{
private int num=100;//此处用static的话,有多种票时就出乱子了
Object obj=new Object();
public void run(){
sale();
}
public void sale(){
while(true){
synchronized(obj){//同步代码块
if(num>0){
try{
Thread.sleep(10);//测试线程安全问题让其睡一会,结果会出现num=0、1、-1的情形
}
catch(InterruptedException e){
//处理代码
}
System.out.println(Thread.currentThread().getName()+"..sale.."+num--);
}
}
}
}
}
public class ThreadSaleTicket {
public static void main(String[] args) {
Ticket ti=new Ticket();
Thread t1=new Thread(ti);//建立三个售票窗口
Thread t2=new Thread(ti);
Thread t3=new Thread(ti);
t1.start();
t2.start();
t3.start();
}
}
* 多线程售票
* */
package azhu;
//票类
class Ticket implements Runnable{
private int num=100;//此处用static的话,有多种票时就出乱子了
Object obj=new Object();
public void run(){
sale();
}
public void sale(){
while(true){
synchronized(obj){//同步代码块
if(num>0){
try{
Thread.sleep(10);//测试线程安全问题让其睡一会,结果会出现num=0、1、-1的情形
}
catch(InterruptedException e){
//处理代码
}
System.out.println(Thread.currentThread().getName()+"..sale.."+num--);
}
}
}
}
}
public class ThreadSaleTicket {
public static void main(String[] args) {
Ticket ti=new Ticket();
Thread t1=new Thread(ti);//建立三个售票窗口
Thread t2=new Thread(ti);
Thread t3=new Thread(ti);
t1.start();
t2.start();
t3.start();
}
}