二、实验内容 1.完成填空并上机验证下面代码,给出代码段的主要功能。 class Sell{ int fiveLeft=2,tenLeft=0,twentyLeft=0; String s=null; public synchronized void SellTickets(int money){ if(money==5) { fiveLeft=fiveLeft+1; s="给你入场券您的钱正好!"; System.out.println(s); }else if(money==20){ while(fiveLeft<3){ try{ wait(); }catch(InterruptedException e){} fiveLeft=fiveLeft-3; twentyLeft=twentyLeft+1; s="给你入场券"+"你给我 20,找你 15 元"; System.out.println(s); } notifyAll(); } } } public class Demo implements { Sell sell; Thread twenty,five;public Demo(){ twenty=new Thread(this); five=new Thread(this); sell=new Sell(); twenty. ; five. ; } public static void main(String[] args) { // TODO code application logic here new Demo(); } public void run(){ if(Thread.currentThread()==twenty) { sell.SellTickets(20); }else if(Thread.currentThread()==five){ sell.SellTickets(5); } } }
时间: 2024-04-06 09:32:38 浏览: 98
操作系统上机实验代码
5星 · 资源好评率100%
该代码是一个多线程的售票系统,主要功能是模拟售票过程。Sell类中有三个变量表示售票窗口剩余的五元、十元、二十元的数量。SellTickets方法通过synchronized关键字实现同步,保证了多线程同时访问时不会出现数据冲突。如果顾客给了5元,那么窗口就会将fiveLeft加1,然后输出“给你入场券您的钱正好!”。如果顾客给了20元,那么窗口会判断fiveLeft是否大于等于3,如果不是,则进入等待状态,直到有足够的五元钞票后再进行售票。如果有足够的五元钞票,那么窗口就会将fiveLeft减去3,twentyLeft加1,然后输出“给你入场券你给我 20,找你 15 元”。Demo类中创建了一个Sell对象和两个线程twenty和five,分别表示售票窗口接受20元和5元的请求。在run方法中,如果当前线程是twenty,则执行sell.SellTickets(20);如果当前线程是five,则执行sell.SellTickets(5)。
阅读全文