Java线程控制权的问题十分重要,我们在不断的学习中需要不断的注意相关的问题。下面我们就来看看在源代码中Java线程控制权式如何体现的。当wait的时候其实就是已经放出了线程的控制权,所以one可以运行。one运行时调用notify后又唤醒了two线程所以打印顺序才是:
wait
sleep
wake up
我觉得我解释的已经很清楚了。wait被调用的时候放弃锁,而控制线程是否能使用内容的关键就在于锁,wait并不是thread的内容,而来自于object。你可以这样来理解wait,我wait下就把接力棒交出去了,我当前的这个线程就暂停运行,记住是当前的线程。然后当我交出的接力棒已经又回到我手中的时候,也就是说其他的线程已经完成了任务。这个时候我拿到接力棒继续奔跑。
有时候你应该把问题简单化,建议你看看thinking in java第四版,我明白你是想观察阻塞的出现,你可以将one。start放到two。start的上边就会明白什么意思了
1.package test;
2.import java.util.LinkedList;
3.public class Test_2_A2 {
4.public static void main(String[] args) {
5.SubTreadOne one = new SubTreadOne();
6.SubTreadTwo two = new SubTreadTwo(one);
7.two.start();
8.try {
9.Thread.sleep(1000);
10.} catch (InterruptedException e) {
11.e.printStackTrace();
12.}
13.one.start();
14.}
15.}
16.class SubTreadOne extends Thread {
17.public SubTreadOne() {
18.}
19.public void run() {
20.try {
21.System.out.println("sleep");
22.Thread.sleep(3000);
23.synchronized (this) {
24.this.notifyAll();
25.}
26.}catch (InterruptedException e) {
27.e.printStackTrace();
28.}
29.}
30.}
31.class SubTreadTwo extends Thread {
32.SubTreadOne one;
33.public SubTreadTwo(SubTreadOne one) {
34.this.one = one;
35.}
36.public SubTreadTwo() {
37.}
38.public void run() {
39.try {
40.synchronized (one) {
41.System.out.println("wait");
42.one.wait();
43.System.out.println("wake up");
44.}
45.} catch (InterruptedException e) {
46.e.printStackTrace();
47.}
48.}
49.}
以上就是对Java线程控制权有关代码的详细介绍。
分享到:
相关推荐
在"javaYdmxx107.zip"文件中,可能包含了详细的Java多线程和同步的源代码示例。通过下载并解压文件,你可以: - 分析源码,了解不同线程创建和控制方法的实现。 - 查看同步机制的实际应用,如synchronized和Lock...
5. **Java源代码分析**:源代码可能会包含对上述概念的实现,如定义进程类(包含优先级、执行时间等属性),创建进程队列,实现调度算法(如优先级比较、时间片分配等),以及模拟CPU的切换过程。此外,可能还会有...
Java贪吃蛇游戏是一款经典的计算机程序设计项目,尤其适合初学者和毕业生进行实践与学习。这个项目的源代码提供了实现这个游戏的全部细节,...同时,通过阅读和分析源代码,有助于培养解决问题和独立开发项目的能力。
Java多线程是Java编程中的一个重要领域,它允许程序同时执行多个任务,...由于案例是不完整的,具体的实现细节和问题还需要根据源代码来分析和补充。对于初学者来说,理解并掌握这些概念是成为Java多线程专家的基础。
在提供的压缩包文件“摇奖程序”中,应该包含了实现上述功能的源代码,通过阅读和分析这些代码,我们可以更深入地理解Java线程在实际应用中的使用方式。对于初学者来说,这是一个很好的学习实例,可以从中了解如何在...
Spring作为Java领域最流行的轻量级应用框架之一,其源代码解析对于开发者来说具有极高的学习价值。以下将从几个关键知识点进行深入探讨: 1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,它...
4. **多线程与并发**:为了提供高效服务,源代码可能使用多线程或多进程技术来处理并发请求,提高程序性能。 5. **数据库交互**:如果涉及用户数据存储,源代码可能包含了SQL查询和数据库操作,可能是MySQL、SQLite...
自Servlet 3.0版本开始,Servlet API引入了异步处理能力,允许Servlet在`service()`方法内启动一个异步操作,然后返回控制权给容器,从而提高性能。 8. **Filter**: 除了Servlet之外,`javax.servlet.Filter`...
同时,对于特定的系统环境和需求,自定义实现可以提供更高的灵活性和控制权。 在提供的压缩包`test`中,可能包含了示例代码、配置文件或其他辅助资源。为了详细了解和学习这个纯Java实现,建议解压后仔细研究其中的...
分析这些代码可以帮助我们理解作者如何使用Java语言和其库来构建操作系统的核心组件,包括内存管理、进程控制、I/O操作等。 总的来说,使用Java编写操作系统是一个创新性的尝试,虽然面临一些挑战,如性能优化和...
它通过编译源代码(.java 文件)为字节码(.class 文件),使得在任何安装了 Java 虚拟机(JVM)的平台上都可以执行 Java 程序,而无需为每个平台单独编写代码。这是因为 Java 字节码是一种中间代码,由 JVM 解释...
通过阅读和分析这些源代码,我们可以更深入地了解博主是如何实现多任务、多线程下载功能的,包括他们使用的编程语言、设计模式、具体算法以及如何解决上述提到的问题。 总之,多任务、多线程下载是提高下载性能的...
6. 维护与升级:Java的源代码可读性强,易于维护和升级,减少了软件生命周期中的问题。 随着Java技术的不断发展,它已经成为全球软件开发者的重要工具,不仅在企业级应用中占据主导地位,还在教育领域中广为传播,...
通过阅读和理解这个项目的源代码,开发者可以深入学习Java编程的实际应用,提升自己的编程技能和解决问题的能力。对于初学者而言,这是一个很好的实践项目,可以帮助他们将理论知识转化为实际操作。
在Java编程语言中,"梁权耀"可能是一位开发者或者教育者的姓名,而"47"可能是项目编号、课程编号或者是代码示例的序列号。这个压缩包包含两个文件...如果你需要深入解析代码,建议提供更详细的信息或者直接查看源代码。
这个赛马程序示例可能涵盖了上述一些或多线程编程的原理,通过观察和分析源代码,可以更深入地理解和掌握多线程编程的技术。在实践中,理解并熟练运用这些知识能帮助开发者编写出高效、稳定的多线程应用。
- **字节码生成**:Java源代码经过编译器转换成字节码。 - **类加载**:类加载器将字节码文件加载到内存中。 - **链接**:解析符号引用为直接引用,准备类变量的初始值。 - **初始化**:执行类构造器`<clinit>`方法...
在Java中,可以利用线程(Thread)类和并发库(java.util.concurrent)来模拟进程的创建、调度和上下文切换。通过编写相应的类和方法,可以构建一个模拟的进程池,其中每个进程对象代表一个操作系统中的进程,包含...