要求:
- 在main方法中启动两个线程
- 第一个线程循环随机打印100以内的整数
- 直到第二个线程从键盘读取了”Q“命令
实现代码如下:
public class Homework01 {
public static void main(String[] args) {
THk tHk = new THk();
tHk.start();
Thk2 thk2 = new Thk2(tHk);
thk2.start();
}
}
//第一个线程循环打印1——100之间的数字
class THk extends Thread {
Random rm = new Random();
boolean flag = true;
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
while (flag) {
System.out.println((int) rm.nextInt(100) + 1);
// System.out.println((int)rm.nextInt()*100+1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Thk线程已经退出~");
}
}
//直到第二个线程从键盘读取了“Q”命令
class Thk2 extends Thread {
Scanner scanner = new Scanner(System.in);
private THk tHk;
public Thk2(THk tHk) {
this.tHk = tHk;
}
@Override
public void run() {
while (true) {
//接受用户的输入
System.out.println("请输入你的指令(Q)表示退出:");
char key = scanner.next().toUpperCase().charAt(0);
if (key == 'Q') {
//已通知的方式结束a线程
tHk.setFlag(false);
System.out.println("Thk2退出~");
break;
}
}
}
}
public class Homework11 {
public static void main(String[] args) {
AA aa = new AA();
BB bb = new BB(aa);
aa.start();
bb.start();
}
}
class AA extends Thread {
//该线程是实现不断打印100以内的整数
Random rm = new Random();
boolean flag = true;
public void setFlag(){
flag=false;
}
@Override
public void run() {
while (flag) {
System.out.println((int)rm.nextInt(100)+1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程AA已经退出~");
}
}
class BB extends Thread{
//该线程是读取字符“Q”来终止线程AA
Scanner sc = new Scanner(System.in);
private AA aa;
public BB(AA aa){
this.aa=aa;
}
@Override
public void run(){
while(true){
System.out.println("请输入字符“Q”来退出程序:");
char key = sc.next().toUpperCase().charAt(0);
if(key=='Q'){
aa.setFlag();
}
System.out.println("线程BB已经退出~");
}
}
}
注意:在控制台输入字符的时候,需要按两次回车键,不然系统识别不到,还在一边继续等待输入,一边继续输出~