|
试题3、根据题目描述,使用多线程技术编写程序。 本题分值:45分 考核时间:90分钟 考核方式:实操 考核内容:现火车站开设了3个窗口,共销售200张车票,要求3个窗口同时销售,每销售一张票大约要100ms时间。输出窗口卖出的第几张车票,如下所示: 窗口1:已出售第100张票 窗口3:已出售第99张票 窗口2:已出售第98张票 窗口3:已出售第97张票 窗口1:已出售第96张票 窗口3:已出售第95张票 窗口2:已出售第94张票 窗口3:已出售第93张票 窗口1:已出售第92张票 窗口3:已出售第91张票 …… |
请使用Java的线程技术实现该功能。
- import javafx.embed.swing.SwingNode;
- import org.omg.CORBA.TCKind;
- public class TicketSeller {
- static class TicketResource{
- private int totalTicket = 200;
- private String windowName;
- public synchronized boolean sellTicket(String windowName){
- if(totalTicket > 0){
- try{
- Thread.sleep(10);
- }catch(InterruptedException e){
- Thread.currentThread().interrupt();
- System.out.println(windowName + "终止售票" + e.getMessage());
- return false;
- }
- System.out.println(windowName + ":已售出第" + totalTicket + "张票");
- totalTicket --;
- return true;
- }else{
- return false;
- }
- }
- }
- static class WindowThread extends Thread {
- private TicketResource ticketResource;
- private String windowName;
- WindowThread(TicketResource ticketResource,String windowName){
- this.ticketResource = ticketResource;
- this.windowName = windowName;
- }
- @Override
- public void run(){
- while (ticketResource.sellTicket(windowName)){
- }
- System.out.println(windowName + ":车票已售罄,停止售票");
- }
- }
- public static void main(String[] args) {
- TicketResource ticketResource = new TicketResource();
- Thread window1 = new WindowThread(ticketResource, "窗口1");
- Thread window2 = new WindowThread(ticketResource, "窗口2");
- Thread window3 = new WindowThread(ticketResource, "窗口3");
- window1.start();
- window2.start();
- window3.start();
- try {
- window1.join();
- window2.join();
- window3.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("所有窗口售票结束,200张车票已全部售出");
- }
- }
复制代码
|