我是少侠露飞。学习塑造人生,技术改变世界。
引言
利用多线程售卖火车票也是多线程手写代码的常见问题。需求很简单:创建若干线程代表车票售卖窗口,每个窗口售卖的车票不能有重复,要求写代码实现。
利用wait/notifyAll机制实现
public class Main {
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread t1 = new Thread(ticket);
Thread t2 = new Thread(ticket);
Thread t3 = new Thread(ticket);
Thread t4 = new Thread(ticket);
t1.setName("窗口A");
t2.setName("窗口B");
t3.setName("窗口C");
t4.setName("窗口D");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Ticket implements Runnable {
int serialNumber = 1;
//synchronized为线程加锁,保证每次只有一个线程拿到锁进行售票
@Override
public synchronized void run() {
while (true) {
if (serialNumber <= 100) {
System.out.println(Thread.currentThread().getName() + "卖出" + serialNumber + "号票");
serialNumber++;
}
try {
// 这里wait()休眠一段时间,表示当前线程释放锁,别的线程可以拿到锁进行售票
// 注意wait()方法必须在synchronized代码里使用,因为想要释放锁的前提是,你必须首先持有锁
this.wait(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
我是少侠露飞,咱们下期见。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13483.html