/**
* 计算输出其他线程锁计算的数据
*/
class ThreadA {
public static void main(String[] args) {
ThreadB b = new ThreadB();
//启动计算线程
b.start();
//线程A拥有b对象上的锁。线程为了调用wait()或notify()方法,该线程必须是那个对象锁的拥有者
synchronized (b) {
try {
System.out.println("等待对象b完成计算。。。");
//当前线程A等待
b.wait(); //这里并不是让b去wait,是b的所有者线程wait,但是这个线程的苏醒的条件是b的notify或notifyAll方法的调用而且
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("b对象计算的总和是:" + b.total);
}
}
}
/**
* 计算1+2+3 ... +100的和
*
* @author leizhimin 2008-9-15 13:20:49
*/
class ThreadB extends Thread {
int total;
public void run() {
System.out.println("xxxxxxxxxxxxxxxxxrrrrrrrrrrrrrrrrrrrrrx");
synchronized (this) {
System.out.println("xxxxxxxxxxxxxxxxxx");
for (int i = 0; i < 101; i++) {
total += i;
}
//(完成计算了)唤醒在此对象监视器上等待的单个线程,在本例中线程A被唤醒
notify();
}
}
}
notify():
(唤醒)
(在此对象监视器上)
(等待的)
(单个)
(线程)。
A a = new A();
a.notify();
a是对象监视器
notify()是类A的成员方法
因此wait、notify、notifyAll都属于同一个对象监视器
解决死等问题的途径:
通过某一条件来判断对象监视器是否以及执行了notifyAll()
1)如果已执行,则避免自己被监视器wait()
2)如果没执行,则可以放心大胆的去被wait(),因为迟早都会被notifyAll()
分享到:
相关推荐
以下是根据题目内容整理的一些Java线程相关知识点: 1. **线程睡眠**:`Thread.sleep()`方法用于使当前线程进入睡眠状态,参数单位为毫秒。例如,`sleep(10000)`表示线程将休眠10秒。 2. **线程创建方式**:Java...
C++标准库未提供直接的接口,但可以使用平台相关的API,如Windows的`SetThreadPriority`。 8. **线程 join 和 detach**:`join`方法使得主线程等待子线程完成,`detach`则将线程分离,不再与主线程关联,线程结束时...
华清进程资料总结涵盖了这一领域的深入理解,包括理论知识、代码实现以及相关的试题,旨在帮助学习者全面掌握这一主题。 1. **进程**:进程是操作系统资源分配的基本单位,它拥有独立的内存空间,包括代码段、数据...
本文将详细解析Java多线程的相关知识点。 一、选择题解析 1. 线程并不是程序,而是一个程序的单个执行流。多线程指的是在一个程序中存在多个执行流,用于实现并发执行。因此,选项A是错误的。 2. 选项D描述的操作...
#### 三、线程操作的相关函数 在Linux环境下,常用的线程操作函数包括但不限于: - **pthread_create()**:用于创建一个新的线程。 - **pthread_join()**:等待一个线程的结束。 - **pthread_detach()**:将一个...
### JME试题及答案知识点详解 #### 一、选择题知识点解析 ...这些知识点涵盖了JME中的多个方面,包括网络通信、图形处理、游戏开发等,旨在帮助中级水平的学习者深入理解JME的相关概念和技术细节。
本试题主要涵盖J2ME的基础概念、线程管理、图形处理、图像格式、虚拟机类型、键盘事件处理、以及CLDC配置等相关知识点。 1. **线程管理** - 死亡状态的线程不再可运行:线程处于死亡状态意味着它已经完成了执行...
【Java测试试题解析】 ...以上是对Java测试试题的详细解释,涵盖了Java基础语法、多线程、事件处理、异常处理、类和对象、访问修饰符等相关知识点。这些内容对于理解和掌握Java语言的基本概念和应用至关重要。
最后,如果你遇到的是设计模式相关的题目,那么了解单例模式、工厂模式、观察者模式等常见设计模式的实现和应用场景,将有助于你写出更优雅、可维护的代码。 通过这些Java机试题的练习,不仅可以检验你的编程能力,...
- **公共语言运行时(CLR)**:是.NET框架的核心部分,负责执行托管代码、管理内存、处理线程和异常,以及确保类型的安全性和兼容性。 ### 编译过程 - .NET语言编译器首先将源代码编译成**中间语言(IL)**,也称为**...
根据提供的信息,我们需要探讨CUDA并行计算试题的相关知识点。CUDA(Compute Unified Device Architecture)是NVIDIA推出的一种通用并行计算架构,它使得开发者可以利用NVIDIA的GPU来执行更为通用的计算任务,而不...
"Java考试机试题"通常涵盖Java的基础语法、面向对象编程、异常处理、集合框架、多线程、输入输出流、数据库连接等核心知识点。 1. **Java基础语法**:这包括变量声明、数据类型(如基本类型和引用类型)、运算符、...
数据库知识,尤其是SQL语言,也是初级程序员必备的技能,因此试题可能包含创建、查询、更新和删除数据的相关问题。 网络基础知识在试题中也不会缺席,早期的试题可能涉及TCP/IP协议、网络层次模型、HTTP协议等内容...
然而,由于Java与SUN系统紧密关联,这个认证的试题库也包含了大量与Java编程相关的题目,涵盖了Java的基础知识、语法、类库以及面向对象编程等核心内容。 首先,Java基础是考试的重点。考生需要深入理解Java的特性...
8. **多线程**:掌握线程的创建方式(继承Thread类和实现Runnable接口),线程同步机制(synchronized关键字、wait/notify、Lock接口等),以及并发工具类如Semaphore、CountDownLatch等。 9. **反射**:理解Java...
12. **Java EE**:如果试题针对的是更高级别的认证,那么Java企业版(EE)的相关知识,如Servlet、JSP、EJB、JMS、JPA等,也可能出现在试题中。 2008年的Java试题可以帮助我们回顾当年的Java技术生态,并与现代Java...
Java提供了File类和其他相关API,用于读写和管理这些文件,确保系统的正常运行。 8. **异常处理** 异常处理是软件开发中必不可少的一部分,Java的try-catch-finally结构用于捕获和处理可能出现的错误,保证程序的...
虽然具体内容未给出,但我们可以基于这些关键词来探讨相关的核心知识点。 ### 管理 #### 信息系统管理 在信息系统管理方面,考生需要了解如何有效地管理和维护一个组织的信息系统。这包括了解信息系统的基本组成...
7. **多线程**:Java提供内置的线程支持,学习如何创建和控制线程,理解同步机制如synchronized关键字和wait/notify机制,以及线程池的概念。 8. **输入/输出流**:包括文件I/O、对象序列化和网络I/O,理解流的概念...