题目:实现一个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之后,执行完一次循环之后,该线程有很大几率被切换掉。
相关推荐
在探讨Java多线程机制的知识点之前,我们应当明确,Java中的多线程是通过实现`java.lang.Runnable`接口或继承`java.lang.Thread`类来创建新的线程,并通过这些线程执行并发操作。接下来我们将详细探讨文档中提到的与...
在Java编程中,线程是程序执行的一个独立路径,允许多个任务在同一程序中并发执行。了解线程的相关概念对于开发高效、响应迅速的软件至关重要。 **1. 相关概念理解** 程序是一组静态的代码,而进程是这些代码在内存...
根据提供的文件信息,可以提炼出一系列关于Java多线程机制的知识点。以下知识点均围绕Java多线程展开,并详细解释涉及的概念和组件: 1. 多线程基础概念: - Java多线程是指在Java语言中能够同时执行多个线程的...
Java 多线程知识讲解及练习题 Java 多线程基础知识的了解是 Java 程序设计的重要组成部分,本资源摘要信息对 Java 多线程基础知识进行了详细的讲解和练习题。 1. sleep() 和 wait() 的区别 sleep() 是 Thread 类...
Java线程让步(Yield)是Java多线程编程中的一个重要概念,它涉及到线程调度和并发控制。在多线程环境下,线程让步意味着一个正在运行的线程主动放弃当前的时间片,以便其他就绪状态的线程有机会执行。这与线程的...
T03_Sleep_Yield_Join.java
在IT领域,尤其是在Java编程中,多线程是不可或缺的一部分,尤其对于开发高效并发应用程序至关重要。今天我们将深入探讨由IT十八掌徐培成讲解的Java基础课程中的第八天主题——多线程,特别是关于`yield()`方法的...
【计算机二级Java练习题及答案】是针对Java编程学习者准备的资料,包含了最新的考试题目和对应的解答,有助于备考者复习和检验学习成果。 1. **线程控制**:题目中提到`sleep()`方法,当调用该方法时,当前线程会...
本压缩包,总共包含两个文档,JAVA多线程编程详解-详细操作例子和 Java多线 程编程总结 例如,runnable、thread、stop()、 suspend、yield、setPriority()、getPriority()、synchronized、wait()、join、线程池同步...
在JAVA语言程序设计中,第十四章主要探讨的是多线程这一核心概念。多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。在Java中,多线程是通过实现Runnable...
在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...
"13-Java并发编程学习宝典.zip" 包含了一系列关于Java并发编程的学习资源,旨在帮助开发者掌握多线程编程的核心技术和最佳实践。以下是这些资源所涵盖的关键知识点: 1. **多线程基础** - "03 多线程开发如此简单—...
在本章的基础练习题中,我们探讨了多线程编程中的关键概念,这些知识点对于理解和编写高效的并发程序至关重要。以下是各个题目所涉及的核心知识点: 1. **创建线程的两种方式**: - 定义 `Thread` 类的子类并重写 ...
Java 多线程机制是Java语言的一大特性,它允许程序同时执行多个任务,模拟现实生活中的并发行为。在Java中,创建线程有两种主要方式:继承Thread类和实现Runnable接口。 在例子1中,我们看到一个简单的多线程示例。...
总的来说,`ffmpeg_progress_yield`是Python开发人员处理多媒体文件的一个强大工具,它简化了FFmpeg的使用,提供了进度反馈、事件驱动编程和易用的API,使得在Python项目中集成音视频处理功能变得更加便捷。
在《Java开发实战经典》第六章的课后习题中,我们主要探讨的是Java程序的执行与控制。这些习题的解答涵盖了多个重要的Java编程概念和技术,包括进程管理、线程执行、异常处理以及Java I/O等。接下来,我们将详细讨论...
"java学习课件"中可能包含这些主题的详细讲解,包括实例代码和练习题,以帮助初学者逐步掌握Java编程技能。对于有兴趣深入了解Java的人来说,这是一份宝贵的资源,可以作为自学或者课堂学习的辅助材料。
"java-14-openjdk-14.0.2.12-1.windows.redhat.x86_64.zip" 是OpenJDK 14的一个特定构建,适用于Windows操作系统,并且是64位架构的。 在Java 14中,有几个关键的增强和新特性引入,这些特性旨在提高开发效率、性能...
Python是一种广泛使用的高级编程语言,以其易读性、简洁性和丰富的库支持而闻名。这个压缩包文件"Python-programming-exercises-master"显然包含了用于提升Python编程技能的练习题目。通过解决这些练习,初学者和有...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升程序的效率和响应性。本文将详细解析Java中实现多线程的两种主要方式,并讨论线程的基本概念和内存模型。 首先,理解多线程的概念至关...