Single Thread Execution
該模式是指同一時間內只能有一個線程進入
通過安檢
僅一個乘客可通過安全門,僅需要於FlightSecurity.pass加入synchronized即可完成
@Slf4j
public class FlightSecurity {
private int count = 0;
private String boardingPass;
private String idCard;
public synchronized void pass(Passenger passenger) {
try {
count++;
this.idCard = passenger.getIdCard();
TimeUnit.SECONDS.sleep(1);
this.boardingPass=passenger.getBoardingPass();
this.check();
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
count--;
log.info("count:{} passenger:{}", count, passenger);
}
}
private void check() {
if (!StringUtils.equals(boardingPass,idCard)) {
throw new RuntimeException("no same boardingPass:"+boardingPass+",idCard:"+idCard);
}
}
@ToString
public class Passenger extends Thread {
private String boardingPass;
private String idCard;
private FlightSecurity flightSecurity;
public Passenger(String name, String boardingPass, String idCard, FlightSecurity flightSecurity) {
super(name);
this.boardingPass = boardingPass;
this.idCard = idCard;
this.flightSecurity = flightSecurity;
}
@Override
public void run() {
flightSecurity.pass(this);
}
public String getBoardingPass() {
return boardingPass;
}
public String getIdCard() {
return idCard;
}
}
Last updated
Was this helpful?