1.前言
网上很多例子都有点问题,会抛监视的异常,原因大多都是没有权限获取锁的问题,需要注意的是wait和notify都要放在synchronized代码块里面,synchronized (obj)中的obj就是锁。
2.代码.
public class Test2 extends Thread {
public static Object obj = new Object();
@Override
public void run() {
System.out.println("aa");
try {
Thread.sleep(500);
synchronized (obj) {
obj.wait();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("bb");
}
public void wakeUp(){
synchronized (obj) {
obj.notify();
}
}
public static void main(String[] args) throws InterruptedException {
Test2 test2 = new Test2();
test2.start();
Thread.sleep(9000);
test2.wakeUp();
}
}
分享到:
相关推荐
例如,使用`wait()`和`notify()`方法可以实现线程间的同步,避免数据竞争。另外,`synchronized`关键字在Java中用于锁定代码块,确保同一时刻只有一个线程能执行特定代码。 至于“系统相关类”,这可能指的是操作...
除了基本的线程创建和控制,Java还提供了丰富的同步机制,如`synchronized`关键字、`wait()`, `notify()`, `notifyAll()`方法,以及`Lock`接口(如`ReentrantLock`)和`Condition`接口,以支持更复杂的并发控制。...
11. **多线程**:理解线程的概念,创建和管理线程,以及同步机制如synchronized关键字和wait/notify机制。 12. **枚举和注解**:学习如何定义和使用枚举类型,以及注解在代码中的作用。 每个例子都会逐步引导学习...
`wait()`和`notify()`是Java对象锁的一部分,它们用于控制线程的同步和通信。理解这两个方法的正确使用是掌握多线程编程的关键。 最后,"算术表达式求解java实现"和"很多时候我们需要的是一个HelloWorld"虽然没有...
学习线程同步(如synchronized关键字、wait()和notify()方法)和并发控制(如ExecutorService和Future)是提升程序性能的重要环节。 最后,Java标准库提供了大量预先定义的类和接口,如数学运算、日期时间处理、...
例子会涵盖同步机制,如synchronized关键字,wait()、notify()方法,以及线程池的使用。 7. **Swing和AWT**:如果例子包含图形用户界面(GUI)的代码,那么你将有机会学习如何使用Java的Swing和AWT库构建桌面应用...
6. **线程与并发**:介绍Java的多线程编程,如Thread类、Runnable接口,以及同步机制(如synchronized关键字和wait()、notify()方法)。 7. **泛型**:展示了如何使用泛型来编写更安全、更具复用性的代码。 8. **...
线程的创建、同步和通信是Java开发中的常见问题,例如使用synchronized关键字、wait()和notify()方法等。 I/O流是Java处理输入输出的关键工具,包括文件操作、网络通信等。Java提供了丰富的流类库,如...
理解线程同步和互斥的概念,如synchronized关键字和wait/notify机制,对于开发高效并发程序至关重要。 7. **Java Swing和JavaFX**:这是两个用于创建桌面应用程序的图形用户界面(GUI)库。学习如何使用组件、布局...
此外,多线程编程也可能是这一章的内容,如线程的创建(通过Thread类或Runnable接口)、同步机制(synchronized关键字、wait()、notify()方法)以及线程池的使用。 每一章的学习都伴随着大量的实例代码,这些代码...
6. **线程编程**:Java提供了强大的线程支持,如Thread类、Runnable接口,实例可能涉及多线程同步、并发控制(如synchronized关键字、wait()、notify()方法)。 7. **网络编程**:Socket编程是Java网络编程的基础,...
- 实现一个简单的例子,展示如何使用`join()`确保线程A在线程B结束后再执行。 理解这些概念和方法对于编写高效、可靠的并发程序至关重要。在实际项目中,开发者需要根据具体需求选择合适的方法来管理线程状态,以...
例子将涵盖线程的创建(Thread类和Runnable接口)、线程同步(synchronized关键字,wait/notify机制)以及线程池的使用。 7. **反射机制**:Java反射允许我们在运行时动态访问类的信息和对象的属性。通过实例,你...
本教程将带你进行最简单的线程入门学习。 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。下面我们将详细探讨这两种方法。 1. 继承Thread类 当创建一个新的线程时,你可以选择让新的类继承自...
6. **chap11** - 这一章可能涉及线程和并发,讲解如何在Java中创建和管理多线程程序,以及同步机制,如synchronized关键字和wait/notify机制。 7. **chap12** - 可能会讲解文件输入/输出和流的概念,包括如何读写...
Java 提供了多种方式来获取线程.dump 文件,最简单的方式是使用 jstack 工具,该工具可以生成线程 dump 文件。例如,可以使用以下命令生成线程 dump 文件: ```bash jstack -l <pid> > thread_dump.log ``` 其中,...
并发编程则涉及到线程间的协作和同步,如使用synchronized关键字和wait/notify机制来避免线程间的数据竞争。 最后,《Head First Java》会介绍IO流和网络编程。IO流处理输入和输出,如读取文件、接收网络数据等。...
Java提供了Thread类和Runnable接口来实现并发执行,理解线程同步和通信机制,如synchronized关键字和wait/notify机制,对于开发高效率的多线程应用至关重要。 网络编程也是Java的一个重要领域。Java的Socket类和...
理解线程同步和通信(如synchronized关键字、wait/notify机制)是并发编程的关键。 7. **网络编程**:Java SE提供了Socket编程API,用于实现客户端-服务器应用。学习创建TCP或UDP连接,发送和接收数据是网络编程的...
读者将学习到如何创建和管理线程,使用synchronized关键字进行同步,以及如何利用wait()、notify()和notifyAll()方法进行线程间的协作。 此外,文件I/O操作也是Java开发中的常见任务。书中会涵盖文件的读写、目录...