1. 在这个例子中,休眠(Thread.sleep())被放在同步语句之外,因而程序有较高的执行效率。
在前一个例子中,sleep()放在同步语句之内,使得只有一个线程的synchnoize块执行完,才能执行其他的线程同步块,因而效率非常低
2. 单个线程的异常不会影响其他的线程
类Product.java
import java.util.List; /** * @author Administrator * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class Product implements Runnable { private List container = null; private int count; public Product(List lst) { this.container = lst; } public void run() { while (true) { System.out.println("container.size()=" + container.size() + "," + Thread.currentThread().getThreadGroup().activeCount() + "," + Thread.activeCount()); // Thread[] threads = new Thread[Thread.activeCount()]; // Thread.enumerate(threads); // // for (int j = 0; j < threads.length; j++) { // StackTraceElement[] ste = threads[j].getStackTrace(); // for (int i = 0; i < ste.length; i++) { // System.out.println(threads[j].getName() + ste[i]); // } // } synchronized (container) { if (container.size() > MultiThread.MAX) { try { System.out.println("Exceed the MAX limit."); container.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ container.add(new Object()); container.notify(); //自动通知,快速生产 System.out.println("我生产了" + (++count) + "个"); } //container.add(new Object()); //container.notify(); //System.out.println("我生产了" + (++count) + "个"); } // try { // Thread.sleep(10); // } catch (InterruptedException e) { // e.printStackTrace(); // } } } }
类Consume.java
import java.util.List; /** * @author Administrator * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class Consume implements Runnable { private List container = null; private int count; private String flag = "test is ok"; public Consume(List lst) { this.container = lst; } public void run() { while (true) { synchronized (container) { // if (container.size() == 0) { // try { // System.out.println("container.size=0"); // container.wait();//放弃锁 // } catch (InterruptedException e) { // e.printStackTrace(); // } // }else{ // container.remove(0); // //container.notify(); // System.out.println("我吃了" + (++count) + "个"); // } if(container.size() > 0){ container.remove(0); // //container.notify(); System.out.println(Thread.currentThread().getId() + "我吃了" + (++count) + "个,还剩" + container.size()); }else{ container.notify(); } //container.remove(0); //container.notify(); //System.out.println("我吃了" + (++count) + "个"); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
类MultiThread.java
import java.util.ArrayList; import java.util.List; public class MultiThread { private List container = new ArrayList(); public final static int MAX = 5; public static void main(String args[]) { MultiThread m = new MultiThread(); new Thread(new Consume(m.getContainer())).start(); new Thread(new Product(m.getContainer())).start(); new Thread(new Consume(m.getContainer())).start(); //new Thread(new Product(m.getContainer())).start(); } public List getContainer() { return container; } public void setContainer(List container) { this.container = container; } }
您还没有登录,请您登录后再发表评论
wait和notify讲解
3(深入理解Wait、Notify和Wait与sleep区别).rar
java中多线程编程notify、wait的使用
Java 同步方式 wait和notify/notifyall
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
使用Java多线程的wait和notify方法实现最简单的生产者消费者模式
wait()、notify()和notifyAll()方法2---马克-to-win java视频
源码—Java多线程5—死锁和wait notify notifyAll
开一个子线程来完成一个循环处理的工作,我在主线程中能灵活控制这个子线程的开始、暂停/继续、结束。
wait()、notify()和notifyAll()方法1---马克-to-win java视频
java多线程之wait,notify的用法([ 详解+实例 ]).
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 wait、notify 和 notifyAll 来实现...
一个理解wait()与notify()的例子,让你更好理解.
Java多线程的样例代码,工程,内含wait()、notify()和sychronized的使用范例。
java多线程下wait和notify的作用
主线程去控制子线程wait与notify
JAVAWAIT和NOTIFY的用法.pdf
java-wait和notify的用法.pdf
相关推荐
wait和notify讲解
3(深入理解Wait、Notify和Wait与sleep区别).rar
java中多线程编程notify、wait的使用
Java 同步方式 wait和notify/notifyall
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
使用Java多线程的wait和notify方法实现最简单的生产者消费者模式
wait()、notify()和notifyAll()方法2---马克-to-win java视频
源码—Java多线程5—死锁和wait notify notifyAll
开一个子线程来完成一个循环处理的工作,我在主线程中能灵活控制这个子线程的开始、暂停/继续、结束。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
wait()、notify()和notifyAll()方法1---马克-to-win java视频
java多线程之wait,notify的用法([ 详解+实例 ]).
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 wait、notify 和 notifyAll 来实现...
一个理解wait()与notify()的例子,让你更好理解.
Java多线程的样例代码,工程,内含wait()、notify()和sychronized的使用范例。
java多线程下wait和notify的作用
主线程去控制子线程wait与notify
JAVAWAIT和NOTIFY的用法.pdf
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
java-wait和notify的用法.pdf