SINGLE THREAD
單一執行緒通過,該方式很常使用,類似開關門之類的每次進出僅限一個人,多人可能會造成門口塞爆,因此控管單人員出入是很重要的,此方式就是single thread。
海關安全檢查門哨
每次僅一人進出,檢查完才允許下一個人進入
@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?