zoukankan      html  css  js  c++  java
  • 多线程--生产者消费者--简单例子

    package com.lm.multest;
    
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    class Resource {
    	private int num;
    	private String name;
    	private boolean flag = false;
    	Lock lock = new ReentrantLock();
    	Condition notFull = lock.newCondition();
    	Condition notEmpty = lock.newCondition();
    
    	public void set(String n) {
    		lock.lock();
    		try {
    			while (flag)
    				notFull.await();
    			this.name = n + num++;
    			System.out.println(Thread.currentThread().getName() + "..生产..."
    					+ name);
    			flag = true;
    			notEmpty.signalAll();
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		} finally {
    			lock.unlock();
    		}
    
    	}
    
    	public void out() {
    		lock.lock();
    		try {
    			while (!flag)
    				notEmpty.await();
    			System.out.println(Thread.currentThread().getName() + "..消费.."
    					+ name);
    			flag = false;
    			notFull.signalAll();
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		} finally {
    			lock.unlock();
    		}
    
    	}
    }
    
    class Producer implements Runnable {
    
    	private Resource res;
    
    	Producer(Resource res) {
    		this.res = res;
    	}
    
    	@Override
    	public void run() {
    		while (true)
    			res.set("商品");
    	}
    
    }
    
    class Consumer implements Runnable {
    	private Resource res;
    
    	Consumer(Resource res) {
    		this.res = res;
    	}
    
    	public void run() {
    		while (true)
    			res.out();
    	}
    }
    
    public class ProducerConsumerDemo {
    
    	public static void main(String[] args) {
    		Resource r = new Resource();
    		Producer p = new Producer(r);
    		Consumer c = new Consumer(r);
    
    		Thread th1 = new Thread(p);
    		Thread th2 = new Thread(c);
    		Thread th3 = new Thread(p);
    		Thread th4 = new Thread(c);
    
    		th1.start();
    		th2.start();
    		th3.start();
    		th4.start();
    	}
    
    }
    


  • 相关阅读:
    Semaphore
    财报分析
    关于C#中的new的用法
    Linux(CentOS)下Postgresql数据库的安装配置
    CentOS下实现SCP免输密码传送文件
    HiveQL逻辑执行顺序
    CentOS上以源码的方式安装Redis笔记
    Python学习心得(七) 深入理解threading多线程模块
    SQL Server返回两个Date日期相差共多少天零多少小时零多少分钟零多少秒
    Python学习心得(六) 反射机制、装饰器
  • 原文地址:https://www.cnblogs.com/james1207/p/3285785.html
Copyright © 2011-2022 走看看