1. (程序题)
线程类 T 实现对给定 char[]型数组 ca 以逐字符方式输出。App2 中用 T 构造三个线程,要求三个线程并发执行,但只能以逐字符方式输出以下唯一结果:
线程开始:我1a你2b他3c她4d它5e 线程结束。
注:已给出的代码部分不得改动,否则算错。
注意提交时,需要提交整个程序!且程序有唯一输出结果:
线程开始:我1a你2b他3c她4d它5e线程结束。//注:字符间没有空格,,冒号是中文输入
class App2{
public static void main (String[] args) throws Exception{
char []c1={'1','2','3','4','5'}; //传给 t1
char []c2={'a','b','c','d','e'}; //传给 t2
char []c3={'我','你','他','她','它'}; //传给 t3
ShareResource s=new ShareResource();
System.out.print("线程开始:");
/* 补充代码*/
System.out.print("线程结束。"); //最后输出
}
}
class ShareResource{ //线程间的共享资源
/* 补充代码,可能包含属性、方法*/
}
class T implements Runnable{//要求内嵌线程的方式
/* 补充代码,可能包含属性、方法和构造函数*/
}
答案:
public class App2 {
public static void main(String[] args)throws Exception{
char []c1={'1','2','3','4','5'}; //传给 t1
char []c2={'a','b','c','d','e'}; //传给 t2
char []c3={'我','你','他','她','它'}; //传给 t3
ShareResource s=new ShareResource();
System.out.print("线程开始:");
T t1=new T(s,c1,0,1);
T t2=new T(s,c2,1,2);
T t3=new T(s,c3,2,0);
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.print("线程结束。");
}
}
class ShareResource{
int State=2;
public void readWrite(int myState,int nextState){
while(State!=myState){try {
wait();
}catch (Exception e){;}
}
State=nextState;
notify();
}
}
class T implements Runnable {//要求内嵌线程的方式
private int myState, nextState;
private ShareResource shareResource;
private char[] chars; Thread t;
public T(ShareResource s, char[] c, int m, int n) {
shareResource = s;
chars = c;
myState = m;
nextState = n;
t = new Thread(this);
}
public void join() {
try{
t.join();
}catch (Exception e){;}
}
public void start() {
t.start();
}
public void run() {
synchronized (shareResource) {
for (int i = 0; i < chars.length; i++) {
shareResource.readWrite(myState, nextState);
System.out.print(chars[i]);
}
}
}
}