A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package zuoye;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;

import javax.swing.plaf.basic.BasicBorders.SplitPaneBorder;

import org.omg.CORBA.PUBLIC_MEMBER;

public class ZuoYe_05 {

        /**
         * 5: 读取 名单。txt中所有的人的名字 ,
开启两个线程模拟考试流程,所有的学生在 陈奕迅导师 或者 张学友导师 底下考试,
要求 输出格式:

        何镜波在张学友导师手下过了
        黄嘉俊在陈奕迅导师底下过了
                                        两个老师是随机切换的

        最后统计 两个导师底下个过了多少人
         * @throws IOException
         *                 1建立学术类继承Thread接口
         * 分析,2,第一步读取文档,将文档里的学生存储在一个集合中并将集合内容设置成静态共享
         *                 3,重写run方法,判断学生在线程跑,并输出
         *                 4,主方法调用启动get方法获得文档信息存在list集合
         *                 5,启动两个线程进行输出.
         */
        public static void main(String[] args) throws IOException {
                Student s = new Student();                                        //创建对象
                Student s1 = new Student();
                s.get();                                                                        //调用get方法给list集合赋值
                s.setName("张学友导师");                                                //设置名字
                s.setPriority(10);
                s1.setName("陈奕迅导师");
                s1.setPriority(10);
                s.start();                                                                        //启动线程
                s1.start();       
        }       
}

        class Student extends Thread{               
                private static ArrayList<String> list = new ArrayList<>();        //设置静态集合变量
                private static int i = 0;
                private static int count = 0 ;                                                        //如果放在成员变量54行,那么就会进入各自线程的对象里面在堆内存里存
                private static int count1 = 0;                                                        //一个count和count1,一个自增一个不自增77行就会有一个打印出0和一个自增后的值
                @Override
                public void run() {               
                       
                       
                        while(true) {                               
                                synchronized (Student.class) {
                                        if (i==list.size()) {
                                               
                                                break;
                                        }
                                        try {
                                                sleep(10);
                                        } catch (InterruptedException e) {                                               
                                                e.printStackTrace();
                                        }
                                        if ("张学友导师".equals(getName())) {                                                //判断线程,
                                                System.out.println(list.get(i)+"在张学友导师手下过了");                //输出对应导师过的学生
                                                count++;
                                                i++;
                                        }else if("陈奕迅导师".equals(getName())){
                                                System.out.println(list.get(i)+"在陈奕迅导师手下过了");
                                                count1++;
                                                i++;
                                        }                               
                                }                               
                        }
                        if("张学友导师".equals(getName())){                                                                //如果不做判断两个线程到这里都会进来打印count,
                                                                                                                        //所以会打印两次;
                                System.out.println("张学友导师过了"+count+"人");
                        }
                if(count1!=0){
                        System.out.println("陈奕迅导师过了"+count1+"人");
                }
                       
                }
                public static  ArrayList<String> get() throws IOException{
                        BufferedReader fis = new BufferedReader(new FileReader("名单.txt"));                //建立读取文档对象
                        String line;
                        while((line=fis.readLine())!=null){                                                                                       
                                list.add(line);                                                                                                //把每一个写入集合
                        }
                        fis.close();                                                                //关流
                        //System.out.println(list);
                        return list;
                }
               
        }
       
       


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马