⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exam1.java

📁 操作系统第一次实验作业,一个模拟若干售票网点的售票程序
💻 JAVA
字号:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.text.NumberFormat;
import java.lang.*;
class shell
  {
	int tick = 4;                  //票的数目
    String s;

      public synchronized void order(int n)   //n代表资源,>5,代表线程no1得到资源,<5代表线程no2得到资源
      {
		 if(tick>0)                           //判断票是否已卖完,未卖完就运行以下代码,否则输出服务暂停

           {

		       if (Example2.n>=5)             //判断no1线程得到资源
                {
			       while( Example2.cpu < 5)   //判断是否同时分配到cpu,>5,代表no1得到cpu。<5,代表no2得到cpu
                    {
				       try
                      {
						  s="No1得到资源,但得不到cpu,放弃资源进入等待";
			              Example2.text.append("\n"+ s +"剩余票数 " +tick);       //得到资源但得不到cpu
			              Example2.n=Example2.n-5;                              //释放资源,进入等待

			             wait();
			           }


			           catch(InterruptedException e){}
		             }
		             s="No1得到资源,同时亦得到cpu,售出 1 张票,";
                     tick = tick-1;                                              //得到资源,卖1张票
                     Example2.text.append("\n"+ s +"剩余票数 " +tick);
                     Example2.n=Example2.n-5;
                     Example2.cpu=Example2.cpu-5;                               //释放资源同cpu
                     s="No1售票完毕,释放资源同cpu,,";
                     Example2.text.append("\n"+ s +"剩余票数 " +tick);

                  }

	           else if (Example2.n<5)              //判断no2得到资源
	            {
			      while( Example2.cpu > 5)         //判断是否同时分配到cpu
                    {
				     try
                     {
                        s="No2得到资源,但得不到cpu,放弃资源进入等待";                //得到资源但得不到cpu
                         Example2.text.append("\n"+ s +"剩余票数 " +tick);
                        Example2.n=Example2.n+5;                                    //释放资源,进入等待

                        wait();
			          }
			           catch(InterruptedException e){}
		             }
		             s="No2得到资源,同时亦得到cpu,售出 1 张票,";
                     tick = tick-1;                                               //得到资源,卖1张票
                     Example2.text.append("\n"+ s +"剩余票数 " +tick);
                     Example2.n=Example2.n+5;
                     Example2.cpu=Example2.cpu+5;                                 //释放资源同cpu
                     s="No2售票完毕,释放资源同cpu,,";
                     Example2.text.append("\n"+ s +"剩余票数 " +tick);

	             }

	      notify();                     //唤醒等待的资源


	           }
	   else       //没有票,暂停服务
	       {
			   Example2.text.append("\n"+"剩余票数 " +tick);
               Example2.text.append("\n"+"服务暂停");
	        }
       }
   }

 public class Example2 extends Applet implements Runnable
  {
	   shell source;
	   Thread No1,No2;
	   static TextArea text;
	   static int n;
	   static int cpu;

	   public void init()
	   {
		   No1=new Thread(this);
	       No2=new Thread(this);
	       text=new TextArea(15,45);
	       add(text);
	       source=new shell();

	    }
	   public void start()
	    {
			for(int t=1;t<6;t++)                    //一天里,售票点进行多次售票
            {
		     cpu=(int)(Math.random()*10);           //随机返回n同cpu的值,相当于no1同no2竟争资源,系统分配cpu
		     n=(int)(Math.random()*10);
			 No1.start();
	         No2.start();

	         No1=new Thread(this);
	         No2=new Thread(this);


	         }

	    }
	    public void run()
	    {
		   source.order(n);       //要模拟线程同步发生,但系统会按顺序执行No1.start();No2.start();所以要用方法order里的资源和cpu来约束线程的执行顺序,相当于同步发生时,谁得cpu谁就先执行!
		   }
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -