zoukankan      html  css  js  c++  java
  • 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在最后执行

  • 相关阅读:
    30岁前不必在乎的28件事
    开发工作的枯燥与快乐
    Ajax技术的初步认识二(转)
    算法实习一
    判断程序是否运行的代码 (有点单例模式的味道)
    SQL2008+SERVER2008的解决方案
    天秤座的爱情(转)
    VB sytem32\ieframe.dll找不到的解决方案
    回忆有感《清明雨上》
    Ajax技术的初步认识一(转)
  • 原文地址:https://www.cnblogs.com/peiminer/p/13617839.html
Copyright © 2011-2022 走看看