标签:i++ 通信 线程通信 code 释放 ring name null 资源
public class ShareResourse { private String name ; private String gender; private boolean isEmpty=true;//表示为数据为空 /** * 生产者向共享资源中存储数据 * name 存贮的姓名 * gender 存储的性别 */ synchronized public void push (String name,String gender){ try { while(!isEmpty){//当前为false ,存储不为空,等待消费者消费, //使用同步锁对象来调用, 表示当前线程释放同步锁,只能被其他线程所唤醒 this.wait(); } //~~~~~~开始消费~~~~~~~· this.name = name; Thread.sleep(10); this.gender= gender; //~~~~~~开始消费~~~~~~~~ isEmpty= false;//不为空需要一个消费消费 this.notify();//唤醒一个消费者 }catch (Exception e) { e.printStackTrace(); } } /** * 消费者从共享资源中取出数据 */ synchronized public void popup(){ try { while(isEmpty){//当前为true ,存储为空,等待生产者生产, //使用同步锁对象来调用, 表示当前线程释放同步锁,只能被其他线程所唤醒 this.wait(); } //~~~~~~~~开始生产~~~~~~~~~~~~~ Thread.sleep(10); System.out.println(this.name +"——"+this.gender); //~~~~~~~~结束生产~~~~~~~ isEmpty = true;//为空,需要生产 this.notify();//唤醒一个生产者 }catch (Exception e) { e.printStackTrace(); } } }
//生产者
//生产者 public class Product implements Runnable { //共享资源对象 private ShareResourse resourse = null; public Product(ShareResourse resourse){ this.resourse = resourse; } public void run() { for (int i = 0; i < 500; i++) { if(i%2==0) resourse.push("春哥~", "男"); else resourse.push("凤姐", "女"); } } }
//消费者
package 线程通信; public class consumer implements Runnable { private ShareResourse resourse= null; public consumer(ShareResourse resourse) {//使用构造器传递resourse this.resourse= resourse; } @Override public void run() { for (int i = 0; i < 500; i++) { resourse.popup(); } } }
//测试类
package 线程通信; public class App { public static void main(String[] args) { ShareResourse resourse = new ShareResourse(); new Thread(new Product(resourse)).start();//有参构造器Proudct new Thread(new consumer(resourse)).start();//有参构造器consumer } }
标签:i++ 通信 线程通信 code 释放 ring name null 资源
原文地址:http://www.cnblogs.com/ITxiaocai/p/6551409.html