package charpter07; //yield():礼让的行为public class Processor implements Runnable { @Override public void run() { for (int i = 0; i <= 100; i++) { System.out.println(Thread.currentThread().getName() + "--------->" + i); // 让线程发生礼让的行为 if (i % 5…
sleep() 方法sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行).这个“正在执行的线程”是指this.currentThread()返回的线程.sleep方法有两个重载版本: sleep(long millis)     //参数为毫秒 sleep(long millis,int nanoseconds)    //第一参数为毫秒,第二个参数为纳秒 sleep相当于让线程睡眠,交出CPU,让CPU去执行其他的任务. 但是有一点要非常注意,sleep方法不会释放锁…
线程的五种状态 线程从创建到销毁一般分为五种状态,如下图: 1) 新建 当用new关键字创建一个线程时,就是新建状态. 2) 就绪 调用了 start 方法之后,线程就进入了就绪阶段.此时,线程不会立即执行run方法,需要等待获取CPU资源. 3) 运行 当线程获得CPU时间片后,就会进入运行状态,开始执行run方法. 4) 阻塞 当遇到以下几种情况,线程会从运行状态进入到阻塞状态. 调用sleep方法,使线程睡眠. 调用wait方法,使线程进入等待. 当线程去获取同步锁的时候,锁正在被其他线程…
让出CPU执行权的yield方法 Thread类有一个静态的yield方法,当一个线程在调用yield方法时,实际上就是暗示线程调度器请求让出自己的CPU使用,但是线程调度器可以无条件忽略这个暗示. 操作系统是为每个线程分配一个时间片来占有CPU的,正常情况下当一个线程把分配自己的时间片使用完后,线程调度器才会进行下一轮的线程调度,而当一个线程调用了Thread.yield方法的时候,是告诉线程调度器自己占有的时间片还没有使用完的部分,自己不想使用了,这暗示线程调度器现在就可以进行下一轮的线程调…
     yiled()方法的作用是放弃当前CPU的资源,将资源让给其它线程,但放弃的时间不确定,有可能刚刚放弃,又马上获得了CPU时间片.下面看一个小例子,看一下具体效果. public static void main(String[] args) throws InterruptedException { MyThread t = new MyThread(); t.start(); Thread.sleep(2); for (int i = 0; i < 9000; i++) { Sys…
刚开始学线程的时候也是被这几个方法搞的云里雾里的,尤其是一开始看的毕老师的视频,老师一直在强调执行权和执行资格,看的有点懵逼,当然不是说毕老师讲的不好,就是自己有点没听明白,后来复习看了一些其他的博客总结一下线程中的几个容易懵逼的方法以及线程的六种状态. 先来看线程的6种状态,看下面这张图,这张图是在别人博客里面看见的,但是我感觉他的原图有些不完美所以自己重新画了一张图: 先来解释一下这张图,红色字体表示java中的线程的6种状态.当然图也不是很完善,还有LockSupport对象的park/p…
先上一段代码 public class YieldExcemple { public static void main(String[] args) { Thread threada = new ThreadA(); Thread threadb = new ThreadB(); // 设置优先级:MIN_PRIORITY最低优先级1;NORM_PRIORITY普通优先级5;MAX_PRIORITY最高优先级10 threada.setPriority(Thread.MIN_PRIORITY);…
yield方法是暂停当前正在执行的线程对象,并执行其他线程. 这是一个静态方法,一旦执行,它会使当前线程让出CPU.让出的cpu并不代表当前线程不执行了.当前线程让出CPU后,还会CPU资源的争夺,但是是否能够再次被分配到,就不一定了. 举个栗子: public class TestYield { public static void main(String[] args) { MyThread3 t1 = new MyThread3("t1"); MyThread3 t2 = new…
概念 我们知道 start() 方法是启动线程,让线程变成就绪状态等待 CPU 调度后执行. 那 yield() 方法是干什么用的呢?来看下源码. /** * A hint to the scheduler that the current thread is willing to yield * its current use of a processor. The scheduler is free to ignore this * hint. * * <p> Yield is a heu…
先上一段代码 public class YieldExcemple { public static void main(String[] args) { Thread threada = new ThreadA(); Thread threadb = new ThreadB(); // 设置优先级:MIN_PRIORITY最低优先级1;NORM_PRIORITY普通优先级5;MAX_PRIORITY最高优先级10 threada.setPriority(Thread.MIN_PRIORITY);…