Java使用多執行緒模擬售票
實作代碼:
?
package com.fan.base;
import lombok.Getter;
import lombok.Setter;
import java.util.Stack;
/**
* 多執行緒同步方法測驗
*/
public class MultipleThreadSellTicketSynchronizingDemo {
public static void main(String[] args) {
SellTicket sellTicket=new SellTicket();
sellTicket.add(); //添加門票
//創建執行緒 并且啟動
new Thread(sellTicket,"一號售票視窗").start();
new Thread(sellTicket,"二號售票視窗").start();
new Thread(sellTicket,"三號售票視窗").start();
}
}
/**
* 門票類
*/
@Setter
@Getter
class Ticket{
private int count;
//初始化票數
public Ticket(int count) {
this.count=count;
}
Stack<Integer>list=new Stack<>();
//添加門票
public void addTickets(){
for (int i=1;i<=count;i++) {
list.push(i); //將票存入堆疊中
}
}
//售出門票
public void sellTickets(){
Integer pop = list.pop(); //移除堆疊頂元素并回傳值
System.out.println(Thread.currentThread().getName()+":售出第"+pop+"張票 ");
count=list.size(); //更新剩余票數
if (count==0){
System.out.println("票已售空!");
}
}
}
/**
* 售票類 (實作Runnable介面 實作多執行緒)
*/
class SellTicket implements Runnable{
Ticket ticket=new Ticket(100); //初始化票數
//添加票數
public void add(){
ticket.addTickets();
}
public void run(){
//呼叫買票方法(判斷堆疊是否為空 空推吹回圈)
while (!ticket.list.empty()){
if (ticket.getCount()>0){
sellTicket();
}else{
break;
}
}
}
//定義售票方法
private synchronized void sellTicket(){
//堆疊不為空 執行
if (!ticket.list.empty()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//呼叫售票方法
ticket.sellTickets();
}
}
}
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230675.html
標籤:其他
