• 0067 练习


     

    import java.util.Scanner;
    /*
        在main方法中启动两个线程
        第一个线程循环随机打印100以内的整数
        直到第二个线程从键盘读取"Q"命令 停止
     */
    public class ThreadExe {
        public static void main(String[] args) {
            A a = new A();
            B b = new B(a);
            b.start();
            a.start();
        }
    }
    
    class A extends Thread{
        private boolean loop = true;
        @Override
        public void run() {
            while (loop){
                System.out.println((int)(Math.random() * 100 + 1));//随机输出1-100
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("A线程退出");
        }
        public void setLoop(boolean loop){//修改loop
            this.loop = loop;
        }
    }
    
    class B extends Thread{
        private A a;
        Scanner scanner = new Scanner(System.in);
    
        public B(A a) {//传入A对象
            this.a = a;
        }
    
        @Override
        public void run() {
            while (true) {
                System.out.println("请输入Q退出循环");
                char key = scanner.next().toUpperCase().charAt(0);
                if (key == 'Q'){
                    a.setLoop(false);//a线程退出
                    System.out.println("B线程退出");
                    break;//b线程退出
                }
            }
        }
    }
    /*
        两个用户分别从同一张卡里取钱,总10000元
        每次都取1000,当余额不足时停止取款
     */
    public class ThreadExe02 {
        public static void main(String[] args) {
            M m = new M();
            Thread m1 = new Thread(m);
            Thread m2 = new Thread(m);
            m1.start();
            m2.start();
        }
    }
    //共享资源,使用实现Runnable接口方式
    class M implements Runnable{
        private static int money = 10000;
        @Override
        public void run() {
            while (true){
                synchronized (this) {
                    if (money < 1000) {
                        System.out.println("余额不足");
                        break;
                    }
                    money -= 1000;
                    System.out.println(Thread.currentThread().getName() + "取出了1000,余额为" + money);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    /*
        主线程每隔1秒输出1次hello,共10次
        当输出到第五次hello时,启动子线程,每隔1s输出hi,输出10次后退出
        主线程继续输出hello,直到退出
     */
    public class ThreadExe03 {
        public static void main(String[] args) throws InterruptedException {
            Thread h = new Thread(new H());
    
            for (int i = 1;i <= 10;i++){
                System.out.println("hello," + i);
                if (i == 5){
                    h.start();
                    h.join();
                }
                Thread.sleep(1000);
            }
        }
    }
    class H implements Runnable{
        private int count = 0;
        @Override
        public void run() {
            while (true){
                System.out.println("hi," + (++count));
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (count == 10){
                    break;
                }
            }
        }
    }
    

  • 相关阅读:
    java-net-php-python-90儿童失踪登记网站计算机毕业设计程序
    git 提交代码
    如何快速掌握Git这一篇就够了!
    Golang 规则引擎原理及实战
    平衡车的建模与控制
    【重磅开源】MapleBoot项目开发规范
    互联网摸鱼日报(2023-05-28)
    解锁新技能 《创建skywalking-ui9.1.0 页面空白问题解决》
    【Linux复习汇总】得分秘籍,考前速看,可以多考几分
    如何快速开通使用腾讯云云点播服务?
  • 原文地址:https://blog.csdn.net/m0_72797089/article/details/127411017