Java学习之路0806<复习>(线程wait 、notify)
来源:互联网 发布:sql删除一个字段的数据 编辑:程序博客网 时间:2024/04/30 21:48
public class MyRunnable1 implements Runnable{ String Lock1="abc"; String Lock2="def"; @Override public void run() { // TODO Auto-generated method stub System.out.println("1开始启动"); synchronized (Lock1) {// try {// Thread.sleep(1000);// } catch (InterruptedException e) {// // TODO Auto-generated catch block// e.printStackTrace();// } System.out.println("释放Lock1,等待Lock2"); try { Lock1.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("等待Lock2"); synchronized (Lock2) { System.out.println("等到了Lock2,1完成"); } } }}
public class MyRunnable2 implements Runnable{ String Lock1="abc"; String Lock2="def"; @Override public void run() { // TODO Auto-generated method stub System.out.println("2开始启动"); synchronized (Lock2) {// try {// Thread.sleep(1000);// } catch (InterruptedException e) {// // TODO Auto-generated catch block// e.printStackTrace();// } System.out.println("等待Lock1"); synchronized (Lock1) { System.out.println("2完成"); System.out.println("唤醒lock1"); Lock1.notify(); } } }}
public class RunnableTest { public static void main(String[] args) { MyRunnable1 r1=new MyRunnable1(); MyRunnable2 r2=new MyRunnable2(); Thread t1=new Thread(r1); Thread t2=new Thread(r2); t1.start();// try {// Thread.sleep(3000);// } catch (InterruptedException e) {// // TODO Auto-generated catch block// e.printStackTrace();// } t2.start(); }}
运行结果:
1开始启动
释放Lock1,等待Lock2
2开始启动
等待Lock1
2完成
唤醒lock1
等待Lock2
等到了Lock2,1完成
生产者与消费者
public class Product { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; }}
public class Consumer implements Runnable{ private Product pro; public Consumer(Product pro) { this.pro=pro; } @Override public void run() { // TODO Auto-generated method stub while (true) { synchronized (pro) { System.out.println("消费者到仓库"); if (pro.getNum()!=0) { System.out.println("消费了一件产品"); pro.setNum(0); } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { pro.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }}
public class Producer implements Runnable{ private Product pro; public Producer(Product pro) { this.pro=pro; } @Override public void run() { // TODO Auto-generated method stub while (true) { try { Thread.sleep(500); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } synchronized (pro) { System.out.println("生产者生产"); if (pro.getNum()==0) { System.out.println("生产一件产品"); pro.setNum(1); } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } pro.notify(); } } }}
public class ProductTest { public static void main(String[] args) { Product pro=new Product(); Producer producer=new Producer(pro); Consumer consumer=new Consumer(pro); Thread t1=new Thread(producer); Thread t2=new Thread(consumer); t1.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } t2.start(); }}
运行结果:
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
0 0
- Java学习之路0806<复习>(线程wait 、notify)
- java多线程学习之线程通信-wait()等待 notify()唤醒
- Java线程之等待wait唤醒notify示例(一)
- java线程安全之wait/notify模拟Queue (九)
- [Java] 线程之wait和notify
- Java 线程 wait notify
- Java线程同步 (synchronized wait notify)
- Java线程同步(synchronized wait notify)
- Java线程同步 (synchronized wait notify)
- Java线程同步 (synchronized wait notify)
- Java线程同步 (synchronized wait notify)
- Java线程同步 (synchronized wait notify)
- Java 线程同步(wait、notify、notifyAll)
- Java线程wait()与notify()
- java线程wait、notify、notifyAll
- java 线程同步 notify wait
- JAVA -- 线程wait()、notify()、notifyAll()
- JAVA线程 -- wait notify notifyAll
- 20150816 开始捡起以前地专业!
- JAVA反射机制获取类和方法
- codefroces 并查集 250 D
- HDU 1536(sg博弈) S-Nim
- HDOJ 题目分类
- Java学习之路0806<复习>(线程wait 、notify)
- JVM总结
- 适配器模式——设计模式
- ACM数论基础之一_______质因数分解
- poj 2689 Prime Distance 筛素数加强版
- Wildcard Matching
- [Java]Reverse Linked List 链表翻转
- 2015-07-30-functional-programming
- XML与HTML