要求:
实现代码如下:
- 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已经退出~");
- }
- }
- }

注意:在控制台输入字符的时候,需要按两次回车键,不然系统识别不到,还在一边继续等待输入,一边继续输出~