zoukankan      html  css  js  c++  java
  • 多线程

    public class WorldCount {
        public static void main(String[] args) {
            MyThread m1 = new MyThread(); // 创建了一个新的线程对象,存在heap中
            YouThread m2 = new YouThread();
            m1.start(); // 创建一个新的线程,并告诉CPU,该线程已经准备完毕,可以调度。
            m2.start();// start 是 非 阻塞的,可以继续运行。
    //        m2.setDaemon(true);// 设置 m2 为守护线程。//或在 将这个设置为 线程对象的一个属性,初始化的时候就自动配置好。// 由此可以看出,守护线程也是子线程的一种,由主线程创建。
            // t1.run() 如果直接运行该方法,那么只是主线程的内的一次普通的对象方法调用,没有产生新的线程。主线程会把该方法入栈,运行完毕之后才会出栈;
            try {
                m1.join(); // 将 子线程的 运行(时间?!?!)加入主线程(的运行时间?)。也就是说,将 主线程阻塞在此,直到子线程运行结束。
            } catch (Exception e) {//理论上,子线程还是在他自己的线程内运行的。只是,主线程,在等待着他的结束,然后才继续运行。
    
            }
        }
    }
    
    class MyThread extends Thread {
        //    public MyThread(){
    //        this.setDaemon(true);// 设置 线程对象 默认为守护线程,守护所有的非守护线程。当非守护线程结束之后,它随之结束。
    //    }
        @Override
        public void run() { // 当 CPU 调度到该线程时,运行该方法
            while (true) {
                System.out.println("MyThread");
                yield(); // 暂时停止抢占 CPU ,但该命令之后,立刻开始恢复抢占。
            }
    //        try{
    //            Thread.sleep(5000); //休眠 5 s ,在此时间内,不进行cpu抢占。
    //        }catch(Exception e){
    //
    //        }
        }
    }
    
    class YouThread extends Thread {
        @Override
        public void run() {
            while (true) {
                System.out.println("YouThread");
                yield();
            }
        }
    }
    
  • 相关阅读:
    关系型数据库vs非关系型数据库
    Vue使用日常记录
    【0805作业】模拟接力赛跑
    【0805作业】模拟叫号看病
    【0805作业】模拟多人爬山
    【0805作业】实现Runnable接口的方式创建线程
    【0805作业】继承Thread类创建线程,输出20次数字,“你好”,线程名
    超市会员管理系统
    【0802作业】循环注册十个账号,重启程序能正常登录
    【0802作业】复制图片
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/7735219.html
Copyright © 2011-2022 走看看