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;
}
}
|
|