`
HelloSure
  • 浏览: 308153 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

多线程例子:yield

 
阅读更多
public class Test {
	public static void main(String[] args) {
		Thread t1 = new MyThread1();
		Thread t2 = new Thread(new MyRunnable());

		t2.start();
		t1.start();
	}
}

class MyThread1 extends Thread {
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("线程1第" + i + "次执行!");
//			try {
//				Thread.sleep(1000);
//			} catch (InterruptedException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
		}
	}
}

class MyRunnable implements Runnable {
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("线程2第" + i + "次执行!");
			Thread.yield();
		}
	}

}

执行结果是:
线程2第0次执行!
线程1第0次执行!
线程2第1次执行!
线程1第1次执行!
线程2第2次执行!
线程1第2次执行!
线程2第3次执行!
线程1第3次执行!
线程2第4次执行!
线程1第4次执行!
线程2第5次执行!
线程1第5次执行!
线程2第6次执行!
线程2第7次执行!
线程2第8次执行!
线程1第6次执行!
线程2第9次执行!
线程1第7次执行!
线程1第8次执行!
线程1第9次执行!

yield本意是让步,但是看这个结果,似乎并没有起到什么效果。起码是看不出来有什么用处。

事实上,Thread中yield()是让当前线程暂停,交出CPU,转入可运行状态,让系统的线程调度器重新调度一次。再次调度时,哪个线程都有可能被调度。
yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。
分享到:
评论
1 楼 欧阳鹏 2015-03-29  
这代码和执行结果对不上,
t1执行for 循环的时候是不会将cpu控制权给让出来的,你这代码应该在类MyThread1的run方法中在打印后有,Thread.yield()才会有这么个效果。

相关推荐

    JAVA多线程编程详解-详细操作例子

    本压缩包,总共包含两个文档,JAVA多线程编程详解-详细操作例子和 Java多线 程编程总结 例如,runnable、thread、stop()、 suspend、yield、setPriority()、getPriority()、synchronized、wait()、join、线程池同步...

    java多线程机制 -- 源码详解

    java多线程机制: 例子 1 public class Example1 { static Lefthand left;static Righthand right; public static void main(String args[]) { left=new Lefthand(); //创建两个线程。 right=new Righthand();...

    SCoop-Arduino-master.zip

    Arduino Scoop多线程库,若编译出错,请更新IDE到1.8.12以上,库使用示例子: 格式一 #include &lt;SCoop.h&gt;//引入头文件 defineTask(Task1);//定义线程一 void Task1::setup() { pinMode(13, OUTPUT); //多线程的...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    第18章 多线程处理 507 18.1 多线程基础 509 18.2 使用System.Threading 512 18.2.1 使用System.Threading.Thread进行异步操作 512 18.2.2 线程管理 514 18.2.3 在生产代码中不要让线程进入...

    疯狂JAVA讲义

    5.7.1 多态性 151 5.7.2 引用变量的强制类型转换 152 5.7.3 instanceof运算符 154 5.8 继承与组合 154 5.8.1 使用继承的注意点 155 5.8.2 利用组合实现复用 156 学生提问:使用组合关系来实现复用时,需要创建...

    Java范例开发大全 (源程序)

     第13章 多线程编程(教学视频:121分钟) 405  13.1 多线程的五种基本状态 405  实例222 启动线程 405  实例223 参赛者的比赛生活(线程休眠唤醒) 407  实例224 资源搜索并下载(线程...

    java范例开发大全(pdf&源码)

    第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 模拟淘宝...

    java范例开发大全源代码

     实例119 在指定的目录下创建多个临时文件 158  实例120 删除指定目录下的文件 160  实例121 移动指定目录下的文件 163  实例122 文件搜索引挚 167  7.2 字节流 169  实例123 复制指定目录下的文件 ...

    java范例开发大全

    第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 模拟淘宝...

    Java范例开发大全(全书源程序)

    第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 ...

    使用Python中的greenlet包实现并发编程的入门教程

    1 动机 greenlet 包是 Stackless 的副产品,其将微线程称为 “tasklet” 。tasklet运行在伪并发中,使用channel进行同步...(另外,你并不需要一个”yield”关键字,参考例子)。 Greenlet是作为一个C扩展模块给未修改

    PHP编程中尝试程序并发的几种方式总结

    主要介绍了PHP编程中尝试程序并发的几种方式总结,这里举了借助yield的异步以及swoole_process的进程创建等例子,PHP本身并不支持多线程并发,需要的朋友可以参考下

    ingrates:同构JS actor系统

    这样可以更轻松地在角色/线程/进程/设备之间分解actor系统,并在它们之间传输消息。 这是很多WIP,并且没有实际使用情况。 我也对形式化参与者系统不太了解,因此可能缺少您真正想要的一些关键功能。 如果是这样,...

    PHP7下协程的实现方法详解

    但是有些同学对这个概念似懂非懂,不知道怎么实现,怎么用,用在哪,甚至有些人认为yield就是协程! 我始终相信,如果你无法准确地表达出一个知识点的话,我可以认为你就是不懂。 如果你之前了解过利用PHP实现协程的...

    JAVA程序设计教程

    目录 引言 ...................................................................................................................................... I 第一章程序和程序设计 ...............................

Global site tag (gtag.js) - Google Analytics