码迷,mamicode.com
首页 > 编程语言 > 详细

java之多线程调度

时间:2020-09-17 14:04:54      阅读:29      评论:0      收藏:0      [点我收藏+]

标签:test   lazy   时间   min   width   com   adt   级别   inf   

技术图片

技术图片 

技术图片

 

 

 线程的优先级:分为了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在最后执行

技术图片

 

java之多线程调度

标签:test   lazy   时间   min   width   com   adt   级别   inf   

原文地址:https://www.cnblogs.com/peiminer/p/13617839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!