java 第八次实验线程问题 未交上

来源:互联网 发布:北斗神拳 崇明 岛 知乎 编辑:程序博客网 时间:2024/06/01 08:11

8.2.1  线程的状态

4.程序模板

按模板要求,将【代码1】~【代码1】替换为Java程序代码。

ThreadExample.java

 

 

class Tortoiseextends Thread

{

   intsleepTime=0,liveLength=0;

   Tortoise(int sleepTime,String name,int liveLength)

   {

      this.sleepTime=sleepTime;

      this.liveLength=liveLength;

       setName(name); //【代码1  // 设置线程的名字为name

   }

   publicvoid run()

   {

      while(true)

      {

          liveLength--;

          System.out.printf("@");

          try

            {

            sleep(sleepTime);//【代码2 // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后线程

// 重新排队,等待CUP资源

            }

          catch(InterruptedException e)

            {

            }

           if(liveLength<=0)

            {

                System.out.printf(getName()+"进入死亡状态\n");

               return;//【代码3 // 结束run方法的语句

            }

      }

   }

}

class Rabbitextends Thread

{

   intsleepTime=0,liveLength;

   Rabbit(int sleepTime,String name,int liveLength)

   {

      this.sleepTime=sleepTime;

      this.liveLength=liveLength;

     setName(name);//【代码4  // 设置线程的名字为name

   }

   publicvoid run()

   {

      while(true)

      {

          liveLength--;

          System.out.printf("*");

          try

            {

           sleep(sleepTime);// 【代码5 // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后

// 线程重新排队,等待CUP资源

            }

          catch(InterruptedException e)

            {

            }

           if(liveLength<=0)

            {

                System.out.printf(getName()+"进入死亡状态\n");

                return;//【代码6 // 结束run方法的语句

            }

      }

   }

}

 class ThreadExample

{

   publicstaticvoid main(String args[ ])

   {

       Rabbit  rabit;

       rabit=new Rabbit(4,"a",3);//【代码7    // 新建线程rabit

       Tortoise tortoise;

       tortoise=new Tortoise(5,"b",6);//【代码8 // 新建线程tortoise

       rabit.start();//【代码9        // 启动线程tortoise

       tortoise.start();//【代码10       // 启动线程rabit

}

}8.2.2  使用Rannable接口

4.程序模板

按模板要求,将【代码1】~【代码10】替换为Java程序代码。

BankExample.java

 

class Bankimplements Runnable

{

   intmoney=100;//【代码1    // 声明一个int型变量money,初值为100

    Thread zhang,keven;

    Bank()

    {

     zhang=new Thread();//【代码2  // 创建zhangBank对象为zhang的目标对象

      zhang.setName("会计");//【代码3  // 设置zhang线程的名字为会计

      keven=new Thread();//【代码4  // 创建kevenBank对象为keven的目标对象

      keven.setName("出纳");//【代码5  // 设置keven线程的名字为出纳

    }

    publicvoid run()     

    {  

     int i=0;// 【代码6  // 声明一个int类型变量i,初值为0

        while(true)

         {

           if(Thread.currentThread()==zhang)//【代码7// 判断线程zhang是否正在占有CUP资源

           

               i=i+1;

               money=money+1;

               System.out.printf("\n%smoney的值改为%d\t",zhang.getName(),money);

               System.out.printf("%s的局部变量i=%d\n",zhang.getName(),i);

               if(i>=6)

                  {

                     System.out.printf("%s线程进入死亡状态\n",zhang.getName());

                      return;//【代码8 // 使得线程zhang进入死亡状态

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

            }

           elseif(Thread.currentThread()==keven)//【代码9// 判断线程keven是否正在占有CUP资源

            {

               i=i-1;

               money=money-1;

               System.out.printf("\n%smoney的值改为%d\t",keven.getName(),money);

               System.out.printf("%s的局部变量i=%d\n",keven.getName(),i);

               if(i<=-6)

                  {

                     System.out.printf("%s线程进入死亡状态\n",keven.getName());

                     return;//【代码10 // 使得线程keven进入死亡状态

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

             }

         }

    }

}

class BankExample

{

    publicstaticvoid main(String args[ ])

    {

        Bank bank=new Bank();

        bank.zhang.start();

        bank.keven.start();

    }

}

8.2.3  吵醒休眠的线程

4.程序模板

按模板要求,将【代码1】~【代码7】替换为Java程序代码。

ShopExample.java

class Shop implements Runnable

{

    Thread  zhangWorker,wangWorker,boss;

    Shop()

    {

      Shop boss=new Shop(); // 创建bossShop对象为boss目标对象

      zhangWorker=new Thread(boss);  //创建zhangWorkerShop对象为boss目标对象

      wangWorker=new Thread(boss); //创建wangWorkerShop对象为boss目标对象

       zhangWorker.setName("张工");

       wangWorker.setName("王工");

       boss.setName("老板");

    }

    public void run()     

{     

       int i=0;

           if(Thread.currentThread()==zhangWorker)

           {

             while(true)

              {

                  try{

                      i++;

                      System.out.printf("\n%s已搬运了%d箱苹果\n",zhangWorker.getName(),i);

                      if(i==3)

                           return;

                     try{Thread.sleep(1000);}       // zhangWorker休眠10秒(10000毫秒)

                      }

                  catch(InterruptedException e)

                      {

                        System.out.printf("\n%s%s继续工作", _

                                        boss.getName(),zhangWorker.getName());

                      }

               }

          }

          else if(Thread.currentThread()==wangWorker)

           {

              while(true)

              {

                  try{ 

                       i++;

                      System.out.printf("\n%s已搬运了%d箱苹果\n",wangWorker.getName(),i);

                      if(i==3)

                           return;

                     try{Thread.sleep(100;0)}       // wangWorker休眠10秒(10000毫秒)

                      }

                  catch(InterruptedException e)

                      {

                        System.out.printf("\n%s%s继续工作", _

                                        boss.getName(),wangWorker.getName());

                      }

               }

           }

          else if(Thread.currentThread()==boss)

           {

              while(true)

              {

                   zhangWorker.interrupt();      //吵醒zhangWorker

                   wangWorker.interrupt();     //吵醒wangWorker

                   if(!(wangWorker.isAlive()||zhangWorker.isAlive()))

                    {

                        System.out.printf("%n%s下班",boss.getName());

                        return;

                    }

               }

           }

    }

}

class ShopExample

{

    public static void main(String args[])

    {

        Shop shop=new Shop();

        shop.zhangWorker.start();

        shop.wangWorker.start();

        shop.boss.start();

    }

}

 

 

 

 

 

原创粉丝点击