JAVA多线程08-基础篇-线程让步yield()

本节摘要:yield()功能介绍,yield()用法示例

一、功能介绍

让当前线程(调用yield()方法的线程)休息一会,即让当前线程由运行状态(Running)进入到可运行状态(Runnable),yield()方法在Thread类中定义,是一个本地方法,值得注意的是yield()并不释放对象锁,所以在同步块中使用yield(),其他线程仍然获取不到锁,需要等待当前线程执行完之后才能获取锁执行任务

二、代码示例

微调一下sleep的例子

public class YieldDemo {
    public static void main(String[] args) {
        MyRunnable2 r = new MyRunnable2();
        Thread t1 = new Thread(r, "t1");
        Thread t2 = new Thread(r, "t2");
        t1.start();
        t2.start();
    }
}

class MyRunnable2 implements Runnable {
    @Override
    public void run() {
        synchronized (this) {
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() + "--" + i);
                /**
                 * t1,t2在运行时会获取同一个对象锁,
                 * 当取模2为0时,会执行线程让步,但是线程没有释放锁,所以另外一个线程只能等待,直到第一个线程执行完毕才进行
                 */
                if (i % 2 == 0) {
                    Thread.yield();
                }
            }
        }
    }
}
输出结果:
t1--0
t1--1
t1--2
t1--3
t1--4
t2--0
t2--1
t2--2
t2--3
t2--4

三、结果说明

两个线程共享同一个Runnable实例,run方法是加锁方法。线程并没有交替执行任务,当一个线程执行结束后,另外一个线程才开始执行。

四、总结

  • yield()方法是静态方法,可直接调用
  • yield()方法并没有释放对象锁
  • yield()会使线程由运行时状态转化到可运行状态

转载请注明作者及出处,并附上链接http://www.jianshu.com/u/ada8c4ee308b

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面的话: 这篇博客是我从这里“转载”的,为什么转载两个字加“”呢?因为这绝不是简单的复制粘贴,我花了五六个小...
    SmartSean阅读 10,219评论 12 45
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,188评论 1 15
  • 该文章转自:http://blog.csdn.net/evankaka/article/details/44153...
    加来依蓝阅读 12,067评论 3 87
  • 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要...
    嘟爷MD阅读 12,040评论 21 272
  • 开发中有时候需要在一个viewcontrollerA输入,确定后跳转另一个viewcontrollerB,在vi...
    saintPN阅读 2,372评论 0 0