• java之多线程调度


     

     线程的优先级:分为了10个等级,默认是5,最高是10,最低是1

    public class ThreadTest09 {
        public static void main(String[] args) {
    
            //看看优先级别,优先级级别高只是抢占到cpu的时间片相对多一些
            System.out.println("最高优先级:"+ Thread.MAX_PRIORITY);
            System.out.println("最低优先级:"+ Thread.MIN_PRIORITY);
            System.out.println("默认优先级:"+ Thread.NORM_PRIORITY);
    
            Thread t = new Thread(new MyRunnable9());
            t.setName("t");
            //给t线程设置优先级,设置成最高的,大概率是t先执行的多
            t.setPriority(10);
            t.start();
    
            System.out.println(Thread.currentThread().getName()+ "的优先级是:" + Thread.currentThread().getPriority());
            for(int i =0 ;i<1000;i++){
                System.out.println(Thread.currentThread().getName() +"---》" + i);
            }
        }
    }
    
    class MyRunnable9 implements Runnable{
        public void run() {
            System.out.println(Thread.currentThread().getName()+ "的优先级是:" + Thread.currentThread().getPriority());
    
            for(int i =0 ;i<1000;i++){
                System.out.println(Thread.currentThread().getName() +"---》" + i);
            }
        }
    }

    运行结果:

     线程让位: Thread.yield(); //当前线程让给主线程

    public class ThreadTest10 {
        public static void main(String[] args) {
    
            Thread t = new Thread(new MyRunnable10());
            t.setName("t");
            t.start();
    
            for(int i = 1 ; i<=10000; i++){
                System.out.println(Thread.currentThread().getName() +"---》" + i);
            }
        }
    }
    
    
    class MyRunnable10 implements Runnable{
        public void run() {
    
            //每100次让一下
            for(int i = 1 ; i<=10000; i++){
                if(i%100 == 0){
                    Thread.yield(); //当前线程让给主线程
                }
                System.out.println(Thread.currentThread().getName() +"---》" + i);
            }
        }
    }

    结果:在99,199,299....都会让一下

     线程合并:合并到当前线程,当前线程受阻,t线程执行直到结束。 栈并没有合并,只是调度,协调一下

    public class ThreadTest11 {
        public static void main(String[] args) {
            System.out.println("main begin");
    
            Thread t = new Thread(new MyRunnable11());
            t.setName("t");
    
            t.start();
    
            try {
                t.join();  //t合并到当前线程,当前线程受阻,t线程执行直到结束。  栈并没有合并,只是调度,协调一下
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            System.out.println("main over");
        }
    }
    
    
    class MyRunnable11 implements Runnable{
        public void run() {
    
            for(int i =0 ;i<100;i++){
                System.out.println(Thread.currentThread().getName() +"---》" + i);
            }
        }
    }

    结果:main over在最后执行

  • 相关阅读:
    VMware workstation 无法连接到虚拟机
    windows10彻底卸载sql server2017
    MySQL 8.0.19安装教程(windows 64位)
    IntelliJ IDEA 编译程序出现 非法字符 的 解决方法
    IDEA手动增加lib目录
    Idea Svn 导出代码
    intellij idea设置打开多个文件显示在多行tab上及设置 tab上打开文件的上限
    IDEA工作空间多开项目教程,多个项目放在一起
    SpringBoot+Shiro引起事务失效、错误原因、解决方法
    flex:1;的含义
  • 原文地址:https://www.cnblogs.com/peiminer/p/13617839.html
Copyright © 2020-2023  润新知