zoukankan      html  css  js  c++  java
  • java线程间的通讯

    主要通过wait()和notify()方法进行线程间的通讯

    class Product extends Thread{
    	
    	String name;
    	float price;
    	boolean flag = false;
    			
    }
    
    class Productor extends Thread{
    	
    	Product p;
    	
    	public Productor(Product p) {
    		
    		this.p = p;
    		
    	}
    	int i = 0;
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		super.run();
    			while(true){
    				synchronized(p){
    					//通知生产者生产
    					//p.notify();
    				if(!p.flag){
    					if(i%2 == 0){
    						p.name = "苹果";
    						try {
    							Thread.sleep(10);
    						} catch (InterruptedException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}
    						p.price = 4.5f;
    						System.out.println("生产者生产了"+p.name+" 价格是"+p.price);
    					}
    					else{
    							p.name ="香蕉";
    							p.price = 2.5f;
    							System.out.println("生产者生产了"+p.name+"  价格是"+p.price);
    						}
    					i++;
    					p.flag = true;
    					p.notify();
    					
    				  }else{
    					  //生产了产品后等待消费者消费
    						try {
    							p.wait();
    						} catch (InterruptedException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    				     	}
    				}
    			}
    		}
    	}
    		
    }
    
    class Consumer extends Thread{
    
    	Product p;
    	public Consumer(Product p) {
    		
    		this.p = p;
    		
    	}
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		super.run();
    			while(true){
    				synchronized(p){
    					//通知启动消费者消费
    					//p.notify();
    					if(p.flag){
    							System.out.println("消费者消费了"+p.name+"价格是"+p.price);
    							p.flag = false;
    							p.notify();
    						}else{
    						//消费了产品后等待生产者生产
    						try {
    							p.wait();
    						} catch (InterruptedException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    					}
    					}
    				}
    		}
    	}
    

      

    //main方法
    	public static void main(String[] args) {
    
    		Product p = new Product();
    		
    		Productor productor = new Productor(p);
    		Consumer consumer = new Consumer(p);
    		productor.start();
    		consumer.start();
    		
    	}
    

      

  • 相关阅读:
    三、oracle 体系结构
    js字符串转化为日期及日期判断大小
    二十五、oracle pl/sql进阶控制结构(分支,循环,控制)
    五、oracle 10g目录结构
    二十六、oracle pl/sql 分页
    Oracle物化视图语法
    二、理解over()函数
    Java使用SOAP获取webservice实例解析
    常用的PL/SQL开发原则
    二十九、oracle 触发器
  • 原文地址:https://www.cnblogs.com/it-life-nathan/p/6899783.html
Copyright © 2011-2022 走看看