package
org.eleaf.j2se.th;
import
java.io.PrintStream;
public
class
ThreadTest2 {
public
static
void
main(String[] args) {
Tt2Wc tw =
new
Tt2Wc();
Tt2Cook tc =
new
Tt2Cook(tw);
Tt2Sweep ts =
new
Tt2Sweep(tw);
Thread t1 =
new
Thread(tc, tc.
name
);
Thread t2 =
new
Thread(ts, ts.
name
);
t1.start();
t2.start();
}
}
//
卫生间
class
Tt2Wc {
//
假设做饭和打扫卫生都要用到卫生间的水。
boolean
isWaterOpened
=
false
;
//
使用卫生间
public
void
useWc(
int
sc)
throws
InterruptedException {
Thread t = Thread.currentThread
();
//
这段代码使得两个线程在控制台打印信息的颜色不同。其中
“
打扫者
”
打印信息显示为红色。
PrintStream pw =
null
;
if
(
"
打扫者
"
.equals(t.getName())){
pw = System.
err
;
}
else
{
pw = System.
out
;
}
//
如果卫生间的水已经有人在用,就在门外等待。
if
(
isWaterOpened
){
pw.println(Thread.currentThread
().getName() +
"
在卫生间外面等候
"
);
synchronized
(
this
) {
wait();
}
}
synchronized
(
this
) {
changeWaterState();
pw.println(t.getName() +
"
现在使用卫生间
.
持续
"
+ sc/1000 +
"
秒
"
);
//
用
sleep()
方法来简化使用卫生间的过程。
Thread.sleep
(sc);
pw.println(t.getName() +
"
使用卫生间结束
."
);
changeWaterState();
//
通知在门外等待的人可以进来用水了。
notify();
}
}
private
void
changeWaterState() {
isWaterOpened
= !
isWaterOpened
;
//
System.out.println("water state:" + isWaterOpened);
}
}
//
做饭
class
Tt2Cook
implements
Runnable {
private
Tt2Wc
tw
;
public
String
name
=
"
做饭者
"
;
public
Tt2Cook(Tt2Wc tw){
this
.
tw
= tw;
}
public
void
run(){
try
{
System.
out
.println(
name
+
"
开始了
..."
);
//
使用卫生间
tw
.useWc(10000);
System.
out
.println(
name
+
"
去忙别的事了
++++++."
);
tw
.useWc(12000);
System.
out
.println(
name
+
"
去忙别的事了
++++++."
);
tw
.useWc(11000);
System.
out
.println(
name
+
"
去忙别的事了
++++++."
);
tw
.useWc(11000);
System.
out
.println(
name
+
"
关闭
."
);
}
catch
(InterruptedException ie){
ie.printStackTrace();
}
}
}
//
打扫卫生
class
Tt2Sweep
implements
Runnable {
public
String
name
=
"
打扫者
"
;
private
Tt2Wc
tw
;
public
Tt2Sweep(Tt2Wc tw){
this
.
tw
= tw;
}
public
void
run() {
try
{
//
打扫者信息显示为红色
//
System.
err
.println(
name
+
"
开始了
..."
);
//
使用卫生间
tw
.useWc(10000);
System.
err
.println(
name
+
"
去忙别的事了
++++++."
);
tw
.useWc(10000);
System.
err
.println(
name
+
"
去忙别的事了
++++++."
);
tw
.useWc(10000);
System.
err
|
相关推荐
生产者消费者问题操作系统课程设计思路 本资源是关于操作系统课程设计的生产者消费者...本资源提供了生产者消费者问题操作系统课程设计的思路和解决方案,涵盖了信号量、管程、Java中的wait()和notify()等重要知识点。
wait set——线程的休息室 wait方法——把线程放入wait set notify方法——从wait set拿出线程 notifyAll方法——从wait set拿出所有线程 wait、notify、notifyAll是Object类的方法 线程的状态移转 跟线程有关的其他...
开发者可以通过研究游戏源码了解如何创建和启动线程,以及如何使用synchronized关键字和wait/notify机制实现线程间的通信与同步,以确保游戏运行的稳定性和响应速度。 此外,Java的事件驱动模型在处理用户交互时也...
* 当线程调用 wait() 方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用 notify() 或 notifyAll() 方法才能被唤醒。...
讲解线程的基本概念,如何创建和管理线程,以及同步和互斥机制,如synchronized关键字和wait/notify机制。 第十章:Java高级特性 深入探讨枚举、注解、反射、动态代理等Java的高级特性,为后续的进阶学习打下基础。...
第八章会讲解Java的多线程编程,包括线程的创建、同步机制(如synchronized关键字和wait/notify机制)以及线程池,这是构建高效并发程序的关键知识。 第九章通常会涉及一些高级主题,如反射、注解、JNI(Java ...
6. **线程**:了解多线程的概念,如何创建和管理线程,以及同步机制如synchronized关键字和wait/notify机制。 7. **反射机制**:通过反射,可以在运行时动态地获取类的信息并操作对象,这是许多高级Java应用的基础...
4. 线程通信:线程间需要通过某种方式交换信息,如wait()、notify()、notifyAll()方法,或者使用BlockingQueue等高级并发工具。 5. 线程池:为了更好地管理线程,通常会使用线程池,如Java的ExecutorService。它能...
线程间通信则可以通过wait/notify、join、中断等机制实现。 5. Java源码编译(Java Source Code Compilation): Java源码首先由编译器(如javac)处理,经历词法分析、语法分析、注解处理和语义分析等阶段,最终...
对于高级主题,如多线程和并发编程,书中的内容可能会涵盖线程的创建与同步,包括synchronized关键字、volatile变量、wait/notify机制,以及并发集合如ConcurrentHashMap和CopyOnWriteArrayList的使用。 最后,书籍...
理解线程的基本概念,如同步、互斥和死锁,以及如何使用synchronized关键字和wait/notify机制,是处理高性能和高并发应用的关键。 最后,Java的API(Application Programming Interface)非常丰富,包括了用于网络...
8. **多线程**:介绍线程的概念,讲解如何创建和控制线程,以及同步机制,如synchronized关键字和wait/notify机制。 9. **Java API和类库**:通过实例演示如何使用Java标准库中的各种类,如Date、Calendar、Math等...
线程和并发编程也是现代Java开发的重要组成部分,教程可能会介绍线程的创建和同步机制,如synchronized关键字、wait/notify机制和并发工具类。 Java集合框架是另一个重要的主题,包括ArrayList、LinkedList、...
7. **多线程**:了解线程的概念,如何创建和管理线程,以及同步机制如synchronized关键字和wait/notify机制。 8. **Java GUI编程**:通过Swing或JavaFX库,学习如何构建图形用户界面,包括组件的使用、布局管理器和...
8. **多线程编程**:介绍Java中的线程概念,如何创建和管理线程,同步机制(如synchronized关键字和wait/notify机制),以及线程池的使用。 9. **输入/输出与文件操作**:讲解Java I/O流的体系结构,文件读写操作,...
- 线程常用操作方法笔记:讲解了线程的启动、同步、通信以及线程间的协作方法,如wait、notify和join等。 - 线程操作范例笔记:通过实例展示了如何在Java中实现和管理线程,包括守护线程、线程池等高级用法。 五...
本章将介绍如何创建和管理线程,以及同步机制,如synchronized关键字和wait/notify机制。 通过这12章的学习,初学者可以对Java编程有全面的认识,并具备编写简单Java程序的能力。随着实践经验的积累,进阶学习Java...
8. **多线程**:了解线程的概念,学习Thread类和Runnable接口,掌握同步机制,如synchronized关键字和wait/notify机制。 9. **反射机制**:理解Java反射的原理,学会动态加载类、创建对象、访问成员变量和方法。 ...
7. **线程**:理解并发编程的基本原理,学习如何创建和管理线程,以及同步机制(如synchronized关键字和wait/notify机制)。 8. **泛型**:了解泛型的用途,如何在类、接口和方法中使用泛型,以提高代码的类型安全...