public class Operate implements Runnable{ int num; public Operate(Tickets tickets) { this.num = tickets.getNum(); } @Override public void run() { sale(); } public synchronized void sale() { if(tickets.getNum() > 0) { try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } if(tickets.getNum() > 0) { int num = tickets.getNum(); System.out.println(Thread.currentThread().getName() + " 正在售卖第 " + num + " 张票,剩余:" + (--num)); tickets.setNum(num); } } } }
时间: 2024-02-14 09:19:44 浏览: 92
implements Runnable
这段代码是一个多线程买票的实现示例,通过使用synchronized关键字实现了对售票方法的同步。在该示例中,一个Tickets对象作为参数传入Operate的构造函数中,然后在run方法中调用sale方法来进行售票操作。
在sale方法中,首先判断当前Tickets对象中还有没有剩余的票,如果没有则直接退出;如果还有,则使用Thread.sleep模拟售票过程中的耗时操作,然后再次判断Tickets对象中是否还有剩余的票,避免出现多个线程同时进入售票的情况。如果还有剩余的票,则将票数减1,并输出当前售票的线程名称和售出的票数。
需要注意的是,该示例中的synchronized关键字是用来保证每个线程在售票时的同步,并且是对Operate对象进行同步,因为在该示例中每个线程都会创建一个Operate对象。如果需要对Tickets对象进行同步,则需要将synchronized关键字放在sale方法的参数列表中,并将Tickets对象作为参数传入。
阅读全文