我之见 --线程调度 休眠 让步

     今天我们接着学习线程调度相关的内容:sleep(休眠),休眠:是指线程进入阻塞状态 ,主动让出cpu给其他线程,便于轮换执行,时间到了之后线程进入就绪状态,获取Cpu 执行。

    线程休眠的方法是Thread.sleep(long millis) 和Thread.sleep(long millis, int nanos) ,均为静态方法,简单的说:谁调用sleep方法就是谁把cpu让出来,谁进入休眠,谁停止运行。

   

package javaThread;

public class SleepThread {

    public static void main(String[] args) {
        
        ThreadSleep t1 = new ThreadSleep(" t1 ");
        ThreadSleep t2 = new ThreadSleep(" t2 ");
        t1.start();
        t2.start();
        

    }
    
    private static class ThreadSleep extends Thread {
        private String mName;

        public ThreadSleep(String name ) {
            mName = name;
        }
        
        @Override
        public void run() {
            super.run();
            for(int i = 0; i< 10;i++) {
                System.out.println(" name " + mName + " i " + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

输出:

 name  t2  i 0
 name  t1  i 0
 name  t1  i 1
 name  t2  i 1
 name  t2  i 2
 name  t1  i 2
 name  t2  i 3
 name  t1  i 3
 name  t2  i 4
 ..................

 线程让步(yield):和sleep差不多的,都是主动让出Cpu给其他线程执行,但也有不同的地方,sleep只是让出一些时间,时间到了又开始获取cpu,而yield则是仅仅让出cpu,线程又从新进入可执行状态。

   

package javaThread;

public class YiledThread {


    public static void main(String[] args) {
        
        ThreadYield t1 = new ThreadYield(" t1 ", true);
        ThreadYield t2 = new ThreadYield(" t2 ", false);
        t1.start();
        t2.start();
        

    }
    
    private static class ThreadYield extends Thread {
        private String mName;
        private boolean mYelid;

        public ThreadYield(String name ,boolean yield) {
            mName = name;
            mYelid = yield;
        }
        
        @Override
        public void run() {
            super.run();
            
            if(mYelid) {                        
                Thread.yield();
            }
            
            for(int i = 0; i< 10;i++) {
                System.out.println(" name " + mName + " i " + i);              
            }
        }
    }
}
输出:

 name  t2  i 0
 name  t1  i 0
 name  t2  i 1
 name  t1  i 1
 name  t2  i 2
 name  t1  i 2
 name  t2  i 3
 name  t1  i 3
 name  t1  i 4
 name  t1  i 5
 name  t1  i 6
 name  t1  i 7
 name  t1  i 8
 name  t1  i 9
 name  t2  i 4
 name  t2  i 5
 name  t2  i 6
 name  t2  i 7
 name  t2  i 8
 name  t2  i 9



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值