Java实验报告(八)

一、实验目的(结出本次实验所涉及并要求掌握的知识点)

1、理解掌握线程的基本概念。

2、理解和掌握Java多线程结构和开发过程。

3、了解多线程运行机制和生命周期及状态迁移。

4、学会如何创建线程,掌握线程的调度策略,线程优先级和线程同步。

二、实验内容(结出实验内容具体描述)

1.设计一个线程类,它能输出 50 以内的奇数或偶数。用书中介绍的四种构造线程方法,创建两个线程对象,分别输出奇数和偶数。

2. 给定容量 1000 的 int 型数组,依次存储数据 0~999。下面代码采用多线 程技术计算其累加和。

3. 功能:实现多人竞争打电话,借助互斥机制,确保每个人的说话是连续 的。 class DianHuaTing{//此类对象仅提供多人打电话的共享资源 private final String dht="我是电话亭"; } class App{ public static void main (String[] args) { DianHuaTing d=new DianHuaTing(); String[] s1={"1","2","3"}; String[] s2={"A","B","C","D","E"}; String[] s3={"你好,","我也好,","大家都好!"}; Talkers t1=new Talkers(d,"张三",s1); Talkers t2=new Talkers(d,"李四",s2); Talkers t3=new Talkers(d,"王五",s3); t1.start (); t2.start (); t3.start (); } }

 4. 假设某个银行,它可以授受顾客的汇款,每做一次汇款,便可计算出汇 款的总额。现有两个顾客对同一个银行帐号操作,一个顾客分 3 次,每次 将 100 元钱存入,要求存入后将钱的总额输出。

5. 类 BufferArea 用于产生一个[1..100]的随机整数,并可取出此数。存数线 程类 ThreadPutNumber 将数存入缓冲区。读数线程类 ThreadPutNumber 从 缓冲区读取数并判断是否是素数。要求 main 线程最后结束。

三、算法描述及实验步骤(用适当的形式表达算法设计思想与算法实现步骤)

小实验一:设计一个线程类,它能输出 50 以内的奇数或偶数。用书中介绍的四种构造线程方法,创建两个线程对象,分别输出奇数和偶数。

分析:线程要包括三大点:1、要有汽车Thread类,2、要有线程体void run()  3、要有共享资源.start()

四种方法包括继承Thread类方法;实现Runnable接口方法;内部类方法;内部匿名类方法。四种方法的共同点都是要实现run()函数,然后通过main()实现多线程的同时进行,注意。main是特殊线程,最先启动,且只有当所有线程均结束后才能结束;千万不要重写start(),  不要主动调用run()。

由分析和图示可得代码

方法一:继承Thread类:

class MyThread extends Thread{

      private int n,m;

      public MyThread (String name,int n1,int m1) {

            super(name);n=n1;m=m1;

      }

      public void run() {

            for(int i=0;i<m;i++) {

                  if(i%2==n) {

                       System.out.print(i+"  ");

                  }

            }

            System.out.println(getName()+"结束   ");

      }

}



public class T1{

public static void main(String[] args) {

      System.out.print("Main 开始");

      MyThread m1=new MyThread("A",0,50);

      MyThread m2=new MyThread("B",1,50);

      m1.start();m2.start();

      System.out.println("当前共有"+Thread.activeCount()+"个线程 ");

      System.out.println("Main 结束");

}

}

方法二:实现Runnable接口:

class MyThread implements Runnable{

      private int n,m;

      public MyThread (int n1,int m1) {

            n=n1;m=m1;

      }

      @Override

      public void run() {

            // TODO 自动生成的方法存根

                       for(int i=0;i<m;i++) {

                  if(i%2==n) {

                       System.out.print(i+"  ");

                  }

            }

           System.out.println(Thread.currentThread().getName()+" 结束 ");

      }

}





public class T2 {

public static void main(String[] args) {

      System.out.print("Main 开始");

      MyThread m1,m2;Thread t1,t2;

      m1=new MyThread(0,50);

      m2=new MyThread(1,50);

      t1=new Thread(m1,"A");

      t2=new Thread(m2,"B");



      t1.start();t2.start();

      System.out.println("当前共有"+Thread.activeCount()+"个线程 ");

      System.out.println("Main 结束");

}

}

方法三:实现内部类:



class MyThread implements Runnable{

      private int n,m;Thread t;

      public MyThread(String name,int n1,int m1) {

             n=n1;m=m1;t=new Thread(this,name);

      }

      public void start() {

            t.start();

      }

      public void run() {

            for(int i=0;i<m;i++) {

      if(i%2==n) {

            System.out.print(i+"  ");

      }

}

           System.out.println(Thread.currentThread().getName()+" 结束 ");

      }

}





public class T3 {

public static void main(String[] args) {

      System.out.print("Main 开始");

      MyThread m1,m2;

      m1=new MyThread("A",0,50);

      m2=new MyThread("B",1,50);



      m1.start();m2.start();

      System.out.println("当前共有"+Thread.activeCount()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值