• 启动两个线程,用另一个线程以通知的终止另一个线程


    要求:

    1. 在main方法中启动两个线程
    2. 第一个线程循环随机打印100以内的整数
    3. 直到第二个线程从键盘读取了”Q“命令

    实现代码如下:

    1. public class Homework01 {
    2. public static void main(String[] args) {
    3. THk tHk = new THk();
    4. tHk.start();
    5. Thk2 thk2 = new Thk2(tHk);
    6. thk2.start();
    7. }
    8. }
    9. //第一个线程循环打印1——100之间的数字
    10. class THk extends Thread {
    11. Random rm = new Random();
    12. boolean flag = true;
    13. public void setFlag(boolean flag) {
    14. this.flag = flag;
    15. }
    16. @Override
    17. public void run() {
    18. while (flag) {
    19. System.out.println((int) rm.nextInt(100) + 1);
    20. // System.out.println((int)rm.nextInt()*100+1);
    21. try {
    22. Thread.sleep(1000);
    23. } catch (InterruptedException e) {
    24. e.printStackTrace();
    25. }
    26. }
    27. System.out.println("Thk线程已经退出~");
    28. }
    29. }
    30. //直到第二个线程从键盘读取了“Q”命令
    31. class Thk2 extends Thread {
    32. Scanner scanner = new Scanner(System.in);
    33. private THk tHk;
    34. public Thk2(THk tHk) {
    35. this.tHk = tHk;
    36. }
    37. @Override
    38. public void run() {
    39. while (true) {
    40. //接受用户的输入
    41. System.out.println("请输入你的指令(Q)表示退出:");
    42. char key = scanner.next().toUpperCase().charAt(0);
    43. if (key == 'Q') {
    44. //已通知的方式结束a线程
    45. tHk.setFlag(false);
    46. System.out.println("Thk2退出~");
    47. break;
    48. }
    49. }
    50. }
    51. }
    1. public class Homework11 {
    2. public static void main(String[] args) {
    3. AA aa = new AA();
    4. BB bb = new BB(aa);
    5. aa.start();
    6. bb.start();
    7. }
    8. }
    9. class AA extends Thread {
    10. //该线程是实现不断打印100以内的整数
    11. Random rm = new Random();
    12. boolean flag = true;
    13. public void setFlag(){
    14. flag=false;
    15. }
    16. @Override
    17. public void run() {
    18. while (flag) {
    19. System.out.println((int)rm.nextInt(100)+1);
    20. try {
    21. Thread.sleep(1000);
    22. } catch (InterruptedException e) {
    23. e.printStackTrace();
    24. }
    25. }
    26. System.out.println("线程AA已经退出~");
    27. }
    28. }
    29. class BB extends Thread{
    30. //该线程是读取字符“Q”来终止线程AA
    31. Scanner sc = new Scanner(System.in);
    32. private AA aa;
    33. public BB(AA aa){
    34. this.aa=aa;
    35. }
    36. @Override
    37. public void run(){
    38. while(true){
    39. System.out.println("请输入字符“Q”来退出程序:");
    40. char key = sc.next().toUpperCase().charAt(0);
    41. if(key=='Q'){
    42. aa.setFlag();
    43. }
    44. System.out.println("线程BB已经退出~");
    45. }
    46. }
    47. }

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

  • 相关阅读:
    SpringBoot中常用注解的含义
    【JAVA-Day49】Java LinkedList集合详解
    基于SSM 离退休管理平台-计算机毕设 附源码 52629
    01-简历设计(模板1)
    去掉限制+让赢家保持局面不变:P4101
    c++11 标准模板(STL)string(四)
    计算机底层的秘密 摘抄笔记
    聊聊Vim的工作原理
    2014NOIP普及组真题 2. 比例简化
    英语作文写作步骤及模板例句(1)
  • 原文地址:https://blog.csdn.net/qq_58341172/article/details/134038892