线程,用另一个线程以通知的终止另一个线程"/>
启动两个线程,用另一个线程以通知的终止另一个线程
要求:
- 在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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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”来终止线程AAScanner sc = new Scanner(System.in);private AA aa;public BB(AA aa){this.aa=aa;}@Overridepublic void run(){while(true){System.out.println("请输入字符“Q”来退出程序:");char key = sc.next().toUpperCase().charAt(0);if(key=='Q'){aa.setFlag();}System.out.println("线程BB已经退出~");}}
}
注意:在控制台输入字符的时候,需要按两次回车键,不然系统识别不到,还在一边继续等待输入,一边继续输出~
更多推荐
启动两个线程,用另一个线程以通知的终止另一个线程
发布评论