【线程让步yield()方法】

yield()方法可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是将该线程从运行状态转入就绪状态

只是让当前的线程暂停一下,让系统的线程调度器重新调度一次。

很有可能,当某个线程调用了yield()方法暂停之后进入就绪状态,它又马上抢占了CPU的执行权,继续执行。

【注意】

实际上,当某个线程调用了yield()方法暂停之后,只有优先级与当前线程相同,或者优先级比当前线程更高的处于就绪状态的线程才会获得执行的机会。

【示例代码】

package com.Higgin.part02;

class YieldThread implements Runnable{

    public void run() {
for(int i=;i<;i++){ if(i==){
//当i==20的时候,使用yield方法使当前线程让步
Thread.yield();
}
System.out.println(Thread.currentThread().getName()+"===="+i);
}
};
} public class Demo03 {
public static void main(String[] args) {
YieldThread yt=new YieldThread();
Thread t1=new Thread(yt,"高级");
t1.setPriority(Thread.MAX_PRIORITY); //将t1线程设置成最高优先级 Thread t2=new Thread(yt,"低级");
t2.setPriority(Thread.MIN_PRIORITY); //将t2线程设置成最低优先级 t2.start();
t1.start(); }
}

【运行结果】

【注意】

在多CPU执行的情况下,效果可能会不明显。

【小结:关于sleep和yield的区别】

1.sleep()方法暂停当前线程后,会给其他线程执行机会,线程优先级对此没有影响。

yield()方法会给优先级相同或更高的线程更高的执行机会。

2.sleep()方法会将线程转入阻塞状态,直到阻塞时间结束,才会转入就绪状态。

yield()方法会将当前线程直接转入就绪状态。

3.sleep()方法声明抛出了InterruptedException异常,所以调用sleep()方法时要么捕捉该异常,要么显示声明抛出该异常。

yield()方法则没有声明抛出任何异常。

4.sleep()方法比yield()方法有更好的移植性,通常不建议使用yield()方法来控制并发线程的执行。

【设置线程的优先级】

Thread了提供了以下两个优先级相关方法:

1.setPriority( int newPriority ) :设置线程的优先级

2.getPriority( ):获取线程的优先级

默认情况下,main主线程默认为NORM_PRIORITY普通优先级,其值为5。

10_控制线程_线程让步yield的更多相关文章

  1. Lock锁_线程_线程域

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  2. 09_控制线程_线程睡眠sleep

    [线程睡眠] 如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态方法sleep()方法来实现. sleep()方法有两种重载形式: 1.static void ...

  3. 零基础逆向工程38_Win32_12_信号量_线程控制小结

    1 信号量 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.[百度百科] 1.1 创建信号量 HANDLE Create ...

  4. java ---线程wait/notify/sleep/yield/join

    一.线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态). New:新建状态,当线 ...

  5. C#当中的多线程_线程池

    3.1 简介 线程池主要用在需要大量短暂的开销大的资源的情形.我们预先分配一些资源在线程池当中,当我们需要使用的时候,直接从池中取出,代替了重新创建,不用时候就送回到池当中. .NET当中的线程池是受 ...

  6. Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞

    Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...

  7. JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止

    JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...

  8. Java多线程-线程的调度(让步)

    线程的让步含义就是使当前运行着线程让出CPU资源,但是扔给谁不知道,仅仅是让出,线程状态回到可运行状态. 线程的让步使用Thread.yield()方法,yield()为静态方法,功能是暂停当前正在执 ...

  9. java多线程面试题_线程并发面试题

    1.什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个 ...

随机推荐

  1. CentOS 下SSH无密码登录的配置

    CentOS 下SSH无密码登录的配置 最近学习Hadoop.它要求各节点之间通过SSH无密码登录,配置SSH的时候费了一番功夫,记录下来,以备忘. 配置SSH无密码登录需要3步: 1.生成公钥和私钥 ...

  2. DRM加密技术是怎么一回事

    有时我们在播放从网上下载的影视文件时会要求输入用户许可证,否则就不能正常播放,听说是用了一种DRM技术,请简单介绍一下. 答:通常这是利用了多媒体DRM加密技术保护版权(DRM是数字权限管理技术的缩写 ...

  3. TFS上使用Beyond Compare来比较源码

    In Visual Studio, go to the Tools menu, select Options, expand Source Control, (In a TFS environment ...

  4. 【44】将与参数无关的代码抽离templates

    1.template是产生代码的代码,这就意味着源码看起来很少,生成的目标码大量膨胀. 2.考虑,如果两个方法有重复代码,我们会新建一个方法,把重复的代码放进去,原先两个方法调用第三个方法.如果两个类 ...

  5. Java设计模式学习资源汇总

    本文记录了Java设计模式学习书籍.教程资源.此分享会持续更新: 1. 设计模式书籍 在豆瓣上搜索了一把,发现设计模式贯穿了人类生活的方方面面.还是回到Java与程序设计来吧. 打算先归类,再浏览,从 ...

  6. struts2标签具体解释

    要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部增加下面的代码: <%@taglib prefix="s" uri="/struts ...

  7. 启动hbase时,hregionserver没有启动的原因

    今天配置hbase的时候发现有几台机器的regionserver启不来.报错例如以下: at sun.reflect.NativeConstructorAccessorImpl.newInstance ...

  8. mysql之sql语句细节问题汇总

    一.mysql count distinct null 使用注意事项 1  用一个例子来讲解一个问题,现在又一个库表hello,表内容如下: id     name 1      Null 2     ...

  9. linux服务器命令

    清除屏幕数据:ctrl + l  :快速查找某个文件: find / -name 'httpd.conf'   (或php.ini) 重启Apache :   service httpd restar ...

  10. Win7无线网络共享设置方法

    http://jingyan.baidu.com/article/4f34706e89bb2ae387b56d0b.html