一、卖票
需求:三个人卖30张票
代码:
package com.lee.juc.concurrent;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SaleTicket {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(new Runnable() {
public void run() {
for(int i=0;i<100;i++) {
ticket.sale();
}
}
},"AA").start();
new Thread(new Runnable() {
public void run() {
for(int i=0;i<100;i++) {
ticket.sale();
}
}
},"BB").start();
new Thread(new Runnable() {
public void run() {
for(int i=0;i<100;i++) {
ticket.sale();
}
}
},"CC").start();
}
}
//票
class Ticket{
private int num=30;
private Lock lock = new ReentrantLock();
public void sale() {
lock.lock();
try {
if(num>0) {
System.out.println(Thread.currentThread().getName()+".....sale ticket number : "+num--);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
用lambda写:
package com.lee.juc.concurrent;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SaleTicket {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(()->{for(int i=0;i<100;i++) {ticket.sale();}},"AA").start();
new Thread(()->{for(int i=0;i<100;i++) {ticket.sale();}},"BB").start();
new Thread(()->{for(int i=0;i<100;i++) {ticket.sale();}},"CC").start();
}
}
//票
class Ticket{
private int num=30;
private Lock lock = new ReentrantLock();
public void sale() {
lock.lock();
try {
if(num>0) {
System.out.println(Thread.currentThread().getName()+".....sale ticket number : "+num--);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}