假设票数为100,四个人需要完成取票的操作,每次取票间隔为一秒
package 用多线程并发实现购票;
public class Ticket {
private int num;
public Ticket(int num) {
this.num = num;
}
public Ticket() {
}
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
public void buy(){
synchronized (this){
int before= this.getNum();
int after= this.getNum()-1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.setNum(after);
}
}
}
package 用多线程并发实现购票;
public class TicketThread extends Thread{
private Ticket ticket;
public TicketThread() {
}
public TicketThread(Ticket ticket) {
this.ticket = ticket;
}
public void run(){
ticket.buy();
System.out.println(Thread.currentThread().getName()+"购买了一张票,还剩余:"+ticket.getNum());
}
}
package 用多线程并发实现购票;
public class Test {
public static void main(String[] args) {
Ticket ticketnum=new Ticket(100);
TicketThread t1=new TicketThread(ticketnum);
TicketThread t2=new TicketThread(ticketnum);
TicketThread t3=new TicketThread(ticketnum);
TicketThread t4=new TicketThread(ticketnum);
t1.setName("rose");
t2.setName("jennie");
t3.setName("jack");
t4.setName("lisa");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
测试的结果如下,测试正确
rose购买了一张票,还剩余:99
lisa购买了一张票,还剩余:98
jack购买了一张票,还剩余:97
jennie购买了一张票,还剩余:96