Thread.yield()的简单理解

Thread.yield( )方法:

使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择。

也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。

示例如下:

public class YieldTest implements  Runnable{

    @Override
    public void run() {
        for(int i=0;i<=10;i++) {
            System.out.println(Thread.currentThread().getName()+",当前计数:"+i);
            if(5==i) {
                Thread.yield();
                System.out.println(Thread.currentThread().getName()+"执行yield,让所有线程继续竞争。");
            }
        }
    }

    public static void main(String[] args)  {
        Thread thread1=new Thread( new YieldTest(),"thread1");
        Thread thread2=new Thread( new YieldTest(),"thread2" );
        thread1.start();
        thread2.start();

    }

}

执行yield()方法后,可能是 thread1 抢到执行权,也可以是 thread2抢到执行权。

每一次的执行结果都不一样。。

某一次结果如下:

原文地址:https://www.cnblogs.com/expiator/p/9241199.html

时间: 2024-11-06 02:07:49

Thread.yield()的简单理解的相关文章

await Task.Yield(); 超简单理解!

await Task.Yield();//1 var data = LoadData();//2 await Task.Run(() => Do(data));//3 上面的代码类似于: Task.Run(() => { }).ContinueWith(t => Do(LoadData())); 意思就是: loadData 如果耗时较长那么上述代码会产生阻塞,为了LoadData不阻塞 特意加了 await Task.Yield(); 意思就是: 先排个队. 再来看注释:Creates

Handler、Thread和Runnable简单分析

Handler.Thread和Runnable在开发中频繁使用,很多新手都因为概念不清而头绪全无,在这我来简单得缕缕这三者的联系与区别. Runnable是最简单的,它并没有什么包装,Android源码如下: 1 /** 2 * Represents a command that can be executed. Often used to run code in a 3 * different {@link Thread}. 4 */ 5 public interface Runnable {

设计模式的简单理解——单例模式

简单理解 单例模式是指进程生命期内,某个类型只实例化一个对象.这是一种通过语言特性实现的编程约束.如果没有约束,那么多人协同编码时,就会出现非预期的情况. 下面以内存池做例子,假设其类型名为MemoryPool.内存池的本意是统一管理全局内存,优化内存分配,提升性能,记录内存分配信息方便追溯问题,需要全局只有一个实例对象. 第一阶段:没有任何约束 因为没有任何约束,大家会各自实例化MemoryPool对象来使用.最终一片混乱,根本达不到最初使用内存池的目的. 第二阶段:编程语言外的约束 在Mem

MySQL主从同步的简单理解

MySQL主从同步的简单理解 许多大型网站为了减轻海量用户对于服务器并发访问量的性能问题,会使用很多解决的方案, 数据库主从分离,就是目前主流的一种解决手段. 想一下每个用户都通过控制层业务层调用服务器数据,用户量小还好说, 用户量大的话轻则用户体验极差,重则数据库崩溃甚至数据丢失,那真的就是很严重的事情了. 如何解决,解决方案之一就是主从分离. 主从那长话短说就是,一台服务器我处理不了就用几台服务器咯, 但是这些服务器是有主次之分以及职责划分的. * 将我们对数据库的读写操作分别放到不同的服务

php类的封装、继承和多态的简单理解

.面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象: 我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象 一.封装性  封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作.  php提供了三种访问控制修饰符  public 表示全局,本类内部,类外部,子类都可以访问  protected 表示受保护的,只有本类或子类可以访问  pr

简单理解计算机通信

简单理解计算机通信 写在前面: 在计算机刚出现的时候,只能在本机进行一些运算处理,想将一台计算机中的数据转移到另一台计算机中,需要通过外部存储介质来传输,例如磁带.软盘.而网络技术的出现,使得计算机间可以通过一些传输介质(网线.光纤等),实现快速的数据传输和信息交互.如今,网络已无处不在,那么,计算机之间究竟是如何通信的呢?下面会通过一些基础的网络知识来简单理解计算机之间的通信过程. 网络通信模型: 网络通信模型是一种概念模型和框架,旨在使各种计算机在世界范围内互连为网络.其中有OSI七层模型和

Http协议与TCP协议简单理解

在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解. TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的.所以Http连接是一种短连接,是一种无状态的连接.所谓的无状态,是指浏览器每次向服务器发起请求的时候,

回溯法之八皇后问题简单理解

回溯法,简单理解就是有源可溯.基本思想要借鉴穷举法,但是它不是一味地穷举,当发现某一步不符合条件时,这一步后面的穷举操作就不进行了(俗称“剪枝”),我自己把它叫做动态穷举法.假设第一个步骤可行,那么执行第二个步骤,第三个......如果其中第三个步骤不行,那么我们再回过来(回溯),第二个步骤换一种方法尝试,然后再重新第三个步骤,第四个......直到完成任务要求为止. 这里,以八皇后问题为例.试图把回溯法讲清楚. 注意:递归应该是一种算法结构,回溯法是一种算法思想. 何为八皇后问题? (百度百科

Javascript闭包简单理解

提到闭包,想必大家都早有耳闻,下面说下我的简单理解.说实话平时工作中实际手动写闭包的场景并不多,但是项目中用到的第三方框架和组件或多或少用到了闭包.所以,了解闭包是非常必要的.呵呵... 一.什么是闭包简而言之,就是能够读取其他函数内部变量的函数.由于JS变量作用域的特性,外部不能访问内部变量,内部可以外部变量. 二.使用场景1. 实现私有成员.2. 保护命名空间,避免污染全局变量.3. 缓存变量. 先看一个封装的例子: var person = function () { // 变量作用域为函