java实验报告(实验四)

时间:2024.3.31

北 京 林 业 大 学

2013 学年— 20## 学年第 2学期 Java程序设计基础实验报告书

专    业:   电子            班    级:    11-2        

姓    名:   王云飞         学    号:    101114110    

实验地点:  计算机中心      任课教师:    黄儒乐           

实验题目:多线程的使用                                      

实验环境:      Windows2000/XP;局域网                                      

实验要求:

1. 对所有实验内容中涉及到的命令均要亲自实践,对照实验指导书进行。

2. 把实验中出现的问题以及最后解决的情况反馈到实验报告中。

3. 程序作业的源代码要求反馈到实验报告中。

实验内容:

1.线程的状态

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

ThreadExample.java

class Tortoise extends Thread

{

   int sleepTime=0,liveLength=0;

   Tortoise(int sleepTime,String name,int liveLength)

   {

      this.sleepTime=sleepTime;

      this.liveLength=liveLength;

      【代码1】   // 设置线程的名字为name

   }

   public void run()

   {

      while(true)

      {

          liveLength--;

          System.out.printf("@");

          try

            {

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

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

            }

          catch(InterruptedException e)

            {

            }

           if(liveLength<=0)

            {

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

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

            }

      }

   }

}

class Rabbit extends Thread

{

   int sleepTime=0,liveLength;

   Rabbit(int sleepTime,String name,int liveLength)

   {

      this.sleepTime=sleepTime;

      this.liveLength=liveLength;

      【代码4】   // 设置线程的名字为name

   }

   public void run()

   {

      while(true)

      {

          liveLength--;

          System.out.printf("*");

          try

            {

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

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

            }

          catch(InterruptedException e)

            {

            }

           if(liveLength<=0)

            {

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

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

            }

      }

   }

}

public class ThreadExample

{

   public static void main(String args[ ])

   {

       Rabbit  rabit;

       rabit=【代码7】     // 新建线程rabit

       Tortoise tortoise;

       tortoise=【代码8】  // 新建线程tortoise

       【代码9】         // 启动线程tortoise

       【代码10】        // 启动线程rabit

   }

}

2.使用Runnable方法

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

BankExample.java

class Bank implements Runnable

{

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

    Thread zhang,keven;

    Bank()

    {

      【代码2】   // 创建zhang,Bank对象为zhang的目标对象

      【代码3】   // 设置zhang线程的名字为“会计”

      【代码4】   // 创建keven,Bank对象为keven的目标对象

      【代码5】   // 设置keven线程的名字为“出纳”

    }

    public void run()     

    {  

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

        while(true)

         {

           if(【代码7】)  // 判断线程zhang是否正在占有CPU资源

            { 

               i=i+1;

               money=money+1;

               System.out.printf("\n%s将money的值改为%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());

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

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

            }

           else if(【代码9】)  // 判断线程keven是否正在占有CPU资源

            {

               i=i-1;

               money=money-1;

               System.out.printf("\n%s将money的值改为%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());

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

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

             }

         }

    }

}

class BankExample

{

    public static void main(String args[ ])

    {

        Bank bank=new Bank();

        bank.zhang.start();

        bank.keven.start();

    }

}

3. 线程同步实验

分析上面BankExample的输出,是否发现money数据输出有误,请将针对money值得操作写成一个同步方法,解决上述问题。

实验目的:

掌握两种线程创建的方法,掌握线程控制的基本方法。

实现方法、实验结果及结论分析等:

实验内容1源代码:

class Tortoise extends Thread

{

   int sleepTime=0,liveLength=0;

   Tortoise(int sleepTime,String name,int liveLength)

   {

      this.sleepTime=sleepTime;

      this.liveLength=liveLength;

      setName(name);           // 设置线程的名字为name

   }

   public void run()

   {

      while(true)

      {

          liveLength--;

          System.out.printf("@");

          try

            {

             Thread.sleep(sleepTime);  // 让线程调用 sleep方法进入中断状态,sleepTime毫秒后线程

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

            }

          catch(InterruptedException e)

            {

            }

           if(liveLength<=0)

            {

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

                return; // 结束run方法的语句

            }

      }

   }

}

class Rabbit extends Thread

{

   int sleepTime=0,liveLength;

   Rabbit(int sleepTime,String name,int liveLength)

   {

      this.sleepTime=sleepTime;

      this.liveLength=liveLength;

      setName(name);   // 设置线程的名字为name

   }

   public void run()

   {

      while(true)

      {

          liveLength--;

          System.out.printf("*");

          try

            {

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

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

            }

          catch(InterruptedException e)

            {

            }

           if(liveLength<=0)

            {

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

                return;  // 结束run方法的语句

            }

      }

   }

}

public class ThreadExample

{

   public static void main(String args[ ])

   {

       Rabbit  rabit;

       rabit =  new Rabbit(3000,"tuzi",5);     // 新建线程rabit

       Tortoise tortoise;

       tortoise = new Tortoise(1000,"wangba",4);  // 新建线程tortoise

       tortoise.start();        // 启动线程tortoise

       rabit.start();        // 启动线程rabit

   }

}

实验结果:

实验内容2源代码

class Bank implements Runnable

{

    int money = 100;     // 声明一个int型变量money,初值为100

    Thread zhang,keven;

    Bank()

    {

       zhang = new Thread(this);   // 创建zhang,Bank对象为zhang的目标对象

       zhang.setName("会计");   // 设置zhang线程的名字为“会计”

       keven=new Thread(this);   // 创建keven,Bank对象为keven的目标对象

       keven.setName("出纳");   // 设置keven线程的名字为“出纳”

    }

    public void run()     

    {  

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

        while(true)

         {

           if(zhang.isAlive())  // 判断线程zhang是否正在占有CPU资源

            { 

               i=i+1;

               money=money+1;

               System.out.printf("\n%s将money的值改为%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());

                      zhang.stop(); // 使得线程zhang进入死亡状态

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

            }

           else if(keven.isAlive())  // 判断线程keven是否正在占有CPU资源

            {

               i=i-1;

               money=money-1;

               System.out.printf("\n%s将money的值改为%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());

                     keven.stop();  // 使得线程keven进入死亡状态

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

             }

         }

    }

}

class BankExample

{

    public static void main(String args[ ])

    {

        Bank bank=new Bank();

        bank.zhang.start();

        bank.keven.start();

    }

}

实验结果:

实验内容3源代码:

class Bank implements Runnable

{

    int money = 100;     // 声明一个int型变量money,初值为100

    Thread zhang,keven;

    Bank()

    {

       zhang = new Thread(this);   // 创建zhang,Bank对象为zhang的目标对象

       zhang.setName("会计");   // 设置zhang线程的名字为“会计”

       keven=new Thread(this);   // 创建keven,Bank对象为keven的目标对象

       keven.setName("出纳");   // 设置keven线程的名字为“出纳”

    }

    public synchronized void run()     

    {  

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

        while(true)

         {

           if(zhang.isAlive())  // 判断线程zhang是否正在占有CPU资源

            { 

               i=i+1;

               money=money+1;

               System.out.printf("\n%s将money的值改为%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());

                      zhang.stop(); // 使得线程zhang进入死亡状态

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

            }

           else if(keven.isAlive())  // 判断线程keven是否正在占有CPU资源

            {

               i=i-1;

               money=money-1;

               System.out.printf("\n%s将money的值改为%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());

                     keven.stop();  // 使得线程keven进入死亡状态

                  }

               try{

                     Thread.sleep(1000);

                  }

               catch(InterruptedException e)

                  {

                  }

             }

         }

    }

}

class BankExampleUseSynchronizedMethod{

    public static void main(String args[ ])

    {

        Bank bank=new Bank();

        bank.zhang.start();

        bank.keven.start();

    }

}

实验结果:

更多相关推荐:
java 实验报告 全

河南省高等教育自学考试实验报告册计算机及应用专业(本科段)《JAVA》姓名所属地市实验地点实验日期实验总成绩指导教师签名实验单位(实验室)意见:主考院校审核意见:河南科技大学自学考试办公室二零一零年x月实验一j…

五子棋Java实验报告

五子棋JAVA实验报告一实验目的和要求1能够用编程语言实现一个简单的五子棋程序2在实际系统中使用实现人工智能的相关算法3进一步加深对人工智能算法的理解二五子棋的基本常识与原理1五子棋的起源五子棋是一种两人对弈的...

java实验报告实验六Java图形用户界面

信息工程学院Java程序设计实习报告JAVA图形用户界面实验六Java图形用户界面1实验目的1掌握图形用户界面基本组件2了解如何使用布局管理器对组件进行管理3掌握Java事件处理机制2实验内容实验题1编写一个模...

java上机实验心得体会报告

北京联合大学信息学院“面向对象程序设计”课程上机实验报告题目:JAVA上机实验心得体会姓名(学号):专业:计算机科学与技术编制时间:20xx年x月x日版本:1.0.0指导教师:北京联合大学-信息学院编制实验…

Java实验报告

Java语言程序设计实验报告实验序号3一实验目的及要求1进一步熟练Java语法和常用方法的使用2进一步熟练Java程序结构3进一步提高算法设计与实现的能力4为后续章节的学习打下坚实的基础二实验设备环境实验室计算...

Java实验报告

JAVA课程标准实验报告学号1040501211姓名陈嘉生江苏科技大学计算机科学与工程学院基础部1实验一流程控制语句一实验目的1234二实验内容1安装开发环境JDK2编写一个JAVA应用程序在输出窗口显示quo...

java实验报告书3

浙江理工大学Java程序设计实验报告20xx20xx学年第二学期学院班级姓名学号任课教师信息学院11数字媒体技术2周咪咪20xx329700214宋瑾钰上课时间周二三四节数字媒体技术专业20xx年5月12345...

java实验报告4

广东工业大学实验报告学院专业班学号姓名成绩评定一实验目的1学习类的成员变量和成员方法的声明格式2学习java对象的创建和调用3学习参数传递4学习类的私有成员的定义访问方法已经共有成员的定义5理解类的构造方法构造...

Java实验报告1

Java实验报告

java实验报告11

实验报告20xx20xx学年第2学期课程名称JAVA程序设计实验名称字符串和正则表达式实验时间20xx年5月28日指导单位计算机学院软件学院软件工程系指导教师周莉学生姓名班级学号学院系计算机软件学专业计算机科学...

Java语言基础实验报告

浙江大学城市学院实验报告课程名称面向对象程序设计实验项目名称Java语言基础实验学生姓名专业班级学号一实验目的和要求1掌握Java语言的基本数据类型字符串数组2掌握Java语言的运算符表达式语句3能够编写Jav...

java实验九

Java语言程序设计实验报告九张鑫20xx1225实验名称实验日期Java数据流编程指导教师电子商务班级电子商务1302李鸿儒专业姓名

java实验报告(30篇)