问题:假设某部电影的电影票共100张,由三家公司负责销售。
当然我这里只是简单的实现售票过程以及得到每家公司售卖的票数,仅供参考。
方法一:(代码较冗余重复)
/**
*1.使用多线程模拟卖多张电影票的过程,3个公司对外售卖
* @author Administrator
*
*/
public class Ticket {
public static int TicketsNum = 100;
public static int a = 0;
public static int b = 0;
public static int c = 0;
public void saleTickets() {
TicketsNum = TicketsNum - 1;
}
public static void main(String[] args) {
Ticket t1 = new Ticket();
new Thread("公司1") {
public void run() {
while(t1.TicketsNum>0) {
t1.saleTickets();
System.out.println("公司1卖出了一张票");
a = a+1;
}
}
}.start();
new Thread("公司2") {
public void run() {
while(t1.TicketsNum>0) {
t1.saleTickets();
System.out.println("公司2卖出了一张票");
b = b+1;
}
}
}.start();
new Thread("公司3") {
public void run() {
while(t1.TicketsNum>0) {
t1.saleTickets();
System.out.println("公司3卖出了一张票");
c = c+1;
}
}
}.start();
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("公司1总共卖出了"+a+"张票");
System.out.println("公司2总共卖出了"+b+"张票");
System.out.println("公司3总共卖出了"+c+"张票");
}
}
方法二(代码较简洁)
public class Ticket02 implements Runnable {
public static int Tnumber = 100;
@Override
public void run() {
while(true) {
synchronized(this) {
if(Tnumber > 0) {
Tnumber = Tnumber - 1;
System.out.println(Thread.currentThread().getName()+"卖出了一张票,剩余"+Tnumber+"张票");
}else {
System.out.println("很抱歉,票已售空!");
break;
}
}
}
}
public static void main(String[] args) {
Runnable r = new Ticket02();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
Thread t3 = new Thread(r);
t1.setName("猫眼");
t2.setName("美团");
t3.setName("糯米");
t1.start();
t2.start();
t3.start();
}
}