多线程卖票复习Lock和Lambda版
class Ticket {
private int number = 30;
private Lock lock = new ReentrantLock();
public void saleTicket(){
lock.lock();
try{
if(number > 0){
System.out.println(Thread.currentThread().getName() + "\t卖出第:" +(number--) + "\t还剩:" + number);
}
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
class SaleTicket{
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(() -> {for (int i = 1; i <= 30; i++) ticket.saleTicket();},"AAA").start();
new Thread(() -> {for (int i = 1; i <= 30; i++) ticket.saleTicket();},"BBB").start();
new Thread(() -> {for (int i = 1; i <= 30; i++) ticket.saleTicket();},"CCC").start();
}
}
关于lambda表达式的使用语法是: () -> {},这里不做过多解释,关键是被实现的接口中只能存在一个未实现的方法.此处Thread构造方法中需要一个Runnable接口,而Runnable接口中只存在一个未实现的run()方法.
关于Lock的使用jdk简单demo如下:

本文复习了使用Lock和Lambda表达式实现多线程卖票的场景。Lambda简化了Runnable接口的实现,而Lock提供比synchronized更细粒度的线程同步控制。
1万+

被折叠的 条评论
为什么被折叠?



