这个题啊,需要我们使用多线程,Runnable接口子类来模拟。那么就需要在类中实现Runnable接口。
然后我们设置一百张票,然后设置一个synchronized的空object来使用synchronized。
然后卖票的方法中使用while循环来卖,但是为了防止几个窗口卖出同样的票,需要用synchronized给卖票的代码块上锁。再给上一个sleep缓冲一下,还是防止冲到负票数,if判断票数一定不能小于等于0,不然要卖到第0和负数去!测试类设置4个窗口就可以多线程卖票了。现在上代码!
package Case;
public class SellTickets implements Runnable {
private int tickets = 100;
private final Object obj = new Object();
@Override
public void run() {
while (true) {
Thread thread = Thread.currentThread();
synchronized (obj) {
System.out.println(thread.getName() + "卖出:第" + (tickets--) + "张票");
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (tickets <= 0) {
break;
}
}
}
}
测试类:
package Case;
public class TestSellTickets {
public static void main(String[] args) {
Runnable r = new SellTickets();
Thread t1 = new Thread(r, "窗口一");
Thread t2 = new Thread(r, "窗口二");
Thread t3 = new Thread(r, "窗口三");
Thread t4 = new Thread(r, "窗口四");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
喜欢的点赞,不喜欢的解散