`
只帅一次
  • 浏览: 34330 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java编程思想练习题-第21章练习1-yield

阅读更多

题目:实现一个Runnable。在run()内部打印一个消息,然后调用yield()。重复这个操作三次,然后从run中返回。在构造器中放置一条启动消息,并且放置一条在任务终止时的关闭消息。使用线程创建大量的这种任务并驱动他们。

 

package test;

public class test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=1;i<=10;i++){
			new Thread(new runabletest()).start();;
		}
	}

}

class runabletest implements Runnable{
	public String  startstr="start!";
	public  String stopstr="stop!";
	static int num=0;
	public int id;
	public runabletest(){
		num++;
		id=num;
		startstr="#"+id+"  "+startstr;
		stopstr="#"+id+"  "+stopstr;
		System.out.println(startstr);
		
	}
	@Override
	public void run() {
		for(int i=1;i<=3;i++){
			System.out.println("#"+id+" loop"+i);
			Thread.yield();
		}
		System.out.println(stopstr);
	}
	
}

 结果是:

#1  start!
#2  start!
#3  start!
#1 loop1
#2 loop1
#2 loop2
#1 loop2
#1 loop3
#1  stop!
#2 loop3
#2  stop!
#4  start!
#3 loop1
#3 loop2
#5  start!
#4 loop1
#3 loop3
#4 loop2
#3  stop!
#4 loop3
#4  stop!
#6  start!
#7  start!
#5 loop1
#5 loop2
#5 loop3
#5  stop!
#7 loop1
#6 loop1
#8  start!
#6 loop2
#7 loop2
#7 loop3
#6 loop3
#6  stop!
#7  stop!
#9  start!
#8 loop1
#8 loop2
#8 loop3
#8  stop!
#10  start!
#9 loop1
#9 loop2
#9 loop3
#9  stop!
#10 loop1
#10 loop2
#10 loop3
#10  stop!

 如果把yield去掉的话结果是:

#1  start!
#2  start!
#3  start!
#1 loop1
#1 loop2
#1 loop3
#1  stop!
#4  start!
#2 loop1
#5  start!
#2 loop2
#2 loop3
#2  stop!
#5 loop1
#5 loop2
#5 loop3
#5  stop!
#3 loop1
#3 loop2
#3 loop3
#3  stop!
#4 loop1
#4 loop2
#4 loop3
#4  stop!
#6  start!
#7  start!
#8  start!
#7 loop1
#7 loop2
#7 loop3
#7  stop!
#6 loop1
#6 loop2
#6 loop3
#6  stop!
#9  start!
#10  start!
#9 loop1
#9 loop2
#9 loop3
#9  stop!
#10 loop1
#10 loop2
#10 loop3
#10  stop!
#8 loop1
#8 loop2
#8 loop3
#8  stop!

 结论:我们发现把yield去掉之后每个线程的三次循环基本都一下子输出了,因为任务比较简单可以在一个时间片内完成,所以在中途没有切换上下文。而增加了yield之后,执行完一次循环之后,该线程有很大几率被切换掉。

1
3
分享到:
评论

相关推荐

    7Java第七单元练习题-Java多线程机制.pdf

    在探讨Java多线程机制的知识点之前,我们应当明确,Java中的多线程是通过实现`java.lang.Runnable`接口或继承`java.lang.Thread`类来创建新的线程,并通过这些线程执行并发操作。接下来我们将详细探讨文档中提到的与...

    java编程 ---线程

    在Java编程中,线程是程序执行的一个独立路径,允许多个任务在同一程序中并发执行。了解线程的相关概念对于开发高效、响应迅速的软件至关重要。 **1. 相关概念理解** 程序是一组静态的代码,而进程是这些代码在内存...

    7Java第七单元练习题-Java多线程机制[参考].pdf

    根据提供的文件信息,可以提炼出一系列关于Java多线程机制的知识点。以下知识点均围绕Java多线程展开,并详细解释涉及的概念和组件: 1. 多线程基础概念: - Java多线程是指在Java语言中能够同时执行多个线程的...

    java多线程知识讲解及练习题

    Java 多线程知识讲解及练习题 Java 多线程基础知识的了解是 Java 程序设计的重要组成部分,本资源摘要信息对 Java 多线程基础知识进行了详细的讲解和练习题。 1. sleep() 和 wait() 的区别 sleep() 是 Thread 类...

    java 线程让步(Yield)

    Java线程让步(Yield)是Java多线程编程中的一个重要概念,它涉及到线程调度和并发控制。在多线程环境下,线程让步意味着一个正在运行的线程主动放弃当前的时间片,以便其他就绪状态的线程有机会执行。这与线程的...

    T03-Sleep-Yield-Join.java

    T03_Sleep_Yield_Join.java

    【IT十八掌徐培成】Java基础第08天-01.多线程-yield.zip

    在IT领域,尤其是在Java编程中,多线程是不可或缺的一部分,尤其对于开发高效并发应用程序至关重要。今天我们将深入探讨由IT十八掌徐培成讲解的Java基础课程中的第八天主题——多线程,特别是关于`yield()`方法的...

    计算机二级java练习题及答案

    【计算机二级Java练习题及答案】是针对Java编程学习者准备的资料,包含了最新的考试题目和对应的解答,有助于备考者复习和检验学习成果。 1. **线程控制**:题目中提到`sleep()`方法,当调用该方法时,当前线程会...

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

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

    JAVA语言程序设计-第十四章 多线程

    在JAVA语言程序设计中,第十四章主要探讨的是多线程这一核心概念。多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。在Java中,多线程是通过实现Runnable...

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    13-Java并发编程学习宝典.zip

    "13-Java并发编程学习宝典.zip" 包含了一系列关于Java并发编程的学习资源,旨在帮助开发者掌握多线程编程的核心技术和最佳实践。以下是这些资源所涵盖的关键知识点: 1. **多线程基础** - "03 多线程开发如此简单—...

    第30章基础练习题V21

    在本章的基础练习题中,我们探讨了多线程编程中的关键概念,这些知识点对于理解和编写高效的并发程序至关重要。以下是各个题目所涉及的核心知识点: 1. **创建线程的两种方式**: - 定义 `Thread` 类的子类并重写 ...

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

    Java 多线程机制是Java语言的一大特性,它允许程序同时执行多个任务,模拟现实生活中的并发行为。在Java中,创建线程有两种主要方式:继承Thread类和实现Runnable接口。 在例子1中,我们看到一个简单的多线程示例。...

    Python库 | ffmpeg_progress_yield-0.1.2-py2.py3-none-any.whl

    总的来说,`ffmpeg_progress_yield`是Python开发人员处理多媒体文件的一个强大工具,它简化了FFmpeg的使用,提供了进度反馈、事件驱动编程和易用的API,使得在Python项目中集成音视频处理功能变得更加便捷。

    Java 开发实战经典第六章课后习题答案

    在《Java开发实战经典》第六章的课后习题中,我们主要探讨的是Java程序的执行与控制。这些习题的解答涵盖了多个重要的Java编程概念和技术,包括进程管理、线程执行、异常处理以及Java I/O等。接下来,我们将详细讨论...

    java学习课件--适合初学者

    "java学习课件"中可能包含这些主题的详细讲解,包括实例代码和练习题,以帮助初学者逐步掌握Java编程技能。对于有兴趣深入了解Java的人来说,这是一份宝贵的资源,可以作为自学或者课堂学习的辅助材料。

    java-14-openjdk-14.0.2.12-1.windows.redhat.x86_64.zip

    "java-14-openjdk-14.0.2.12-1.windows.redhat.x86_64.zip" 是OpenJDK 14的一个特定构建,适用于Windows操作系统,并且是64位架构的。 在Java 14中,有几个关键的增强和新特性引入,这些特性旨在提高开发效率、性能...

    Python编程练习题,用Python写的各种编程练习题

    Python是一种广泛使用的高级编程语言,以其易读性、简洁性和丰富的库支持而闻名。这个压缩包文件"Python-programming-exercises-master"显然包含了用于提升Python编程技能的练习题目。通过解决这些练习,初学者和有...

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

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

Global site tag (gtag.js) - Google Analytics