重温wait()和notify()
温故知新,接下来看看线程池。
同时启动3个线程A、B、C,A线程输出A 20次,B线程输出B 20次,C线程输出C 20次,要求输出结果为顺序输出A、B、C、A、B、C。。。
class Agent{
public static int state = 1;
public synchronized void sayA() {
if(state != 1){
try {
super.wait();
} catch (Exception e) {
// TODO: handle exception
}
}
System.out.println("A");
state = 2;
super.notify();
}
public synchronized void sayB() {
if(state != 2){
try {
super.wait();
} catch (Exception e) {
// TODO: handle exception
}
}
System.out.println("B");
state = 3;
super.notify();
}
public synchronized void sayC() {
if(state != 3){
try {
super.wait();
} catch (Exception e) {
// TODO: handle exception
}
}
System.out.println("C");
state = 1;
super.notify();
}
}
class A extends Thread{
Agent agent;
public A(Agent agent){
this.agent = agent;
}
public void run(){
for(int i=0;i<20;i++){
try {
Thread.sleep(200);
} catch (Exception e) {
}
agent.sayA();
}
}
}
class B extends Thread{
Agent agent;
public B(Agent agent){
this.agent = agent;
}
public void run(){
for(int i=0;i<20;i++){
try {
Thread.sleep(200);
} catch (Exception e) {
}
agent.sayB();
}
}
}
class C extends Thread{
Agent agent;
public C(Agent agent){
this.agent = agent;
}
public void run(){
for(int i=0;i<20;i++){
try {
Thread.sleep(200);
} catch (Exception e) {
}
agent.sayC();
}
}
}
public class TestWait {
public static void main(String[] args) {
Agent agent = new Agent();
new A(agent).start();
new B(agent).start();
new C(agent).start();
}
}
分享到:
相关推荐
并发编程则涉及到线程间的协作和同步,如使用synchronized关键字和wait/notify机制来避免线程间的数据竞争。 最后,《Head First Java》会介绍IO流和网络编程。IO流处理输入和输出,如读取文件、接收网络数据等。...
此外,线程同步技术也可能被用来确保游戏的实时性和流畅性,例如使用synchronized关键字或者wait/notify机制来处理多坦克同时行动的并发问题。 HTML文件的加入,使得游戏可以通过浏览器直接运行,这可能是利用了...
12. **多线程**:介绍如何创建和管理线程,同步机制如synchronized关键字和wait/notify机制,以及线程池的使用。 13. **接口与抽象类**:对比接口和抽象类的区别,探讨它们在设计模式中的应用。 14. **反射机制**...
10. 多线程:线程的创建、同步机制(synchronized、wait/notify)、线程池。 通过解决这些题目,学习者可以系统地复习和实践Java基础,进一步增强对Java编程的理解和应用能力。对于初学者来说,这是一个非常有价值...
6. **多线程**:学习如何创建和管理线程,理解同步机制,如synchronized关键字、wait()、notify()等。通过习题,可以实践多线程编程,解决并发问题。 7. **反射**:掌握Java反射机制,能够动态地获取类的信息并调用...
线程间的同步和通信是关键,可能使用wait()、notify()或更高级的并发工具如CountDownLatch和CyclicBarrier。 5. **数据结构与算法**:游戏中可能使用到了多种数据结构,如数组、ArrayList或LinkedList来存储游戏...
8. **多线程**:Java内置对多线程的支持,Thread类和Runnable接口可以创建并管理线程,同步机制(synchronized、wait、notify等)保证了线程安全。 9. **泛型**:泛型引入了类型参数,提高了代码的类型安全性和重用...
基本信息 作者: 臧萌 出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 开本:16开 ... ...Java编程老鸟潜心写作,奉献高效率的Java学习心得 ...12.3.1 重温上节中的程序 349...
基本信息 作者: 臧萌 出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 开本:16开 ... ...Java编程老鸟潜心写作,奉献高效率的Java学习心得 ...12.3.1 重温上节中的程序 349...
理解并发编程的概念和同步机制(如synchronized关键字,wait()和notify()方法)至关重要。 8. **接口与抽象类**:接口用于定义一组方法,而抽象类可以包含未实现的方法。两者都是实现多态的方式,但接口不支持字段...