`
HelloSure
  • 浏览: 311110 次
  • 性别: 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()才会有这么个效果。

相关推荐

    多线程经典例子

    标题"多线程经典例子"暗示我们将讨论一些多线程编程中的常见示例。以下是一些经典的应用场景: 1. **下载任务**:当需要从网络下载大文件时,可以创建多个线程分别负责不同部分的下载,这样可以显著加快下载速度。 ...

    java多线程例子.doc

    Java多线程编程是Java开发中的重要组成部分,用于实现程序的并发执行,提高资源利用率和程序响应速度。本文将深入探讨Java多线程的创建、启动以及相关的方法。 首先,Java提供两种创建线程的方式:继承`Thread`类和...

    java多线程例子.pdf

    标题和描述中并未直接提供关于Java多线程的具体例子,但是从给定的【部分内容】中我们可以提取和概括出多个关于Java多线程编程的知识点。 1. Java多线程基础概念: Java多线程是Java语言支持并发编程的一个重要...

    boost 线程库的应用例子, 罗大侠的书本配例,基于1.52

    Boost库,作为C++的一个重要扩展库,提供了大量的高效、实用的工具,其中线程库(thread)是其核心部分之一,广泛用于多线程编程。本文将通过罗剑锋先生的书本配例,基于Boost 1.52.0版本,详细探讨如何在Visual ...

    基于VS2010的C++多线程开发Demo

    总的来说,"基于VS2010的C++多线程开发Demo"提供了一个学习和实践多线程编程的好例子。它涵盖了线程创建、同步、通信等多个关键点,对于理解和应用C++多线程技术有着重要的指导意义。通过研究这个Demo,开发者可以...

    java多线程例子!.doc

    让我们深入探讨一下这个例子以及与多线程相关的知识点。 首先,创建线程主要有两种方式:继承`Thread`类和实现`Runnable`接口。在这个例子中,选择了第一种方式,即创建了一个名为`ThreadTest`的类,它直接继承自`...

    c++多线程写法与案例 c++多线程保存点云

    在C++编程中,多线程技术是一种提升程序性能的有效手段,特别是在处理大量数据或并发操作时。在点云处理领域,多线程可以并行地读取、处理和保存数据,显著加快处理速度。本篇文章将深入探讨C++中的多线程实现,以及...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    在Java编程中,多线程的使用是实现程序并发运行的重要手段。本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、...

    C++11多线程

    在C++11之前,实现多线程通常需要依赖平台特定的API,而C++11标准库提供了跨平台的多线程支持,让开发者能够更容易地编写出高效且可移植的多线程程序。 一、线程基础 1. `std::thread` 类:这是C++11中用于创建和...

    线程的例子

    在Example_1中,可能包含了实现多线程的具体代码示例,如Java的`join()`方法用于让当前线程等待另一个线程结束,`sleep()`方法用于暂停线程执行,`yield()`方法让当前线程暂停,让其他线程有机会执行。 总结,学习...

    Java线程中yield与join方法的区别Java开发J

    在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...

    JAVA多线程编程详解-详细操作例子(转自CSDN)

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升程序的效率和响应性。本文将详细解析Java中实现多线程的两种主要方式,并讨论线程的基本概念和内存模型。 首先,理解多线程的概念至关...

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

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

    经典线程例子——Java线程学习指南

    Java线程是并发编程的核心部分,它允许程序同时执行多个任务,从而提高系统效率...实践中的线程例子将有助于巩固理论知识,加深对线程工作原理的把握。在学习过程中,不断编写和调试多线程程序,是提升技能的最佳途径。

    第7章 多线程程序设计

    总结来说,多线程编程是现代计算机系统中不可或缺的一部分,它能有效利用系统资源,提高程序响应速度,但同时也带来了线程安全、死锁等问题,需要开发者具备扎实的多线程知识来编写高效、稳定的程序。

    多线程风车动画源码

    - 在这个例子中,多线程可能被用来分别控制风车的叶片旋转和背景的移动,以实现动画效果。通过线程交替执行,使得视觉上产生连续的动画效果。 7. **源码分析**: - 源码可能包括了创建线程对象,设置线程优先级,...

    多线程精心总结

    【多线程精心总结】 在Java编程中,多线程是一种重要的并发处理方式,它可以提高程序的执行效率,尤其在处理大量并发任务时。本文将深入探讨Java线程中的几个关键概念,包括`yield()`、`sleep()`、`wait()`、`join...

    Java多线程yield心得分享

    Java多线程编程是开发高并发应用的关键技术之一,其中`Thread.yield()`方法是一个重要的概念,用于线程之间的协作。这个方法允许当前正在执行的线程暂停执行,将其从运行状态变为可执行状态,从而可能让其他线程有...

    java多线程相关面试题 1

    Java 多线程相关面试题总结 Java 多线程相关面试题是一组常见的 Java 面试题,涵盖了 Java 多线程编程的基础知识和高级概念。本文将对这些问题进行详细的解释和分析,帮助读者更好地理解 Java 多线程编程。 1. 为...

Global site tag (gtag.js) - Google Analytics