多线程系列06-yield()

yield():线程让步,能让当前线程由“运行状态”进入到“就绪状态”,从而让其他具有相同优先级的等待线程获取执行权。

示例1:

public class ThreadA extends Thread{

    public ThreadA(String name ){
        super(name);
    }

    public synchronized void run(){
        for(int i = 3; i < 9; i++){
            System.out.printf("%s [%d]:%d\n", this.getName(), this.getPriority(), i);
            if(i % 4 == 0){
                Thread.yield();
            }
        }
    }

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

运行结果:

t1 [5]:3
t1 [5]:4
t2 [5]:3
t2 [5]:4
t1 [5]:5
t1 [5]:6
t1 [5]:7
t1 [5]:8
t2 [5]:5
t2 [5]:6
t2 [5]:7
t2 [5]:8

示例二:

public class YieldLockTest {

    private static Object obj = new Object();

    static class ThreadA extends Thread{
        public ThreadA(String name){
            super(name);
        }

        public void run(){
            synchronized (obj){
                for(int i = 3; i < 8; i++){
                    System.out.printf("%s [%d]:%d\n", this.getName(), this.getPriority(), i);
                    if(i % 3 == 0){
                        Thread.yield();
                    }
                }
            }
        }

        public static void main(String[] args) {
           ThreadA thread1 = new ThreadA("thread1");
           ThreadA thread2 = new ThreadA("thread2");

           thread1.start();
           thread2.start();
        }

    }
}

运行结果:

thread1 [5]:3
thread1 [5]:4
thread1 [5]:5
thread1 [5]:6
thread1 [5]:7
thread2 [5]:3
thread2 [5]:4
thread2 [5]:5
thread2 [5]:6
thread2 [5]:7

结果说明:
(01) wait()是让线程由“运行状态”进入到“等待(阻塞)状态”,yield()是让线程由“运行状态”进入到“就绪状态”。
(02) wait()是会线程释放它所持有对象的同步锁,而yield()方法不会释放锁。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,121评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,617评论 1 15
  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 748评论 0 4
  • 一扩展javalangThread类二实现javalangRunnable接口三Thread和Runnable的区...
    和帅_db6a阅读 605评论 0 1
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 1,815评论 0 12

友情链接更多精彩内容