java中notify和wait实现操作系统pv操作(单一生产者消费者)

单一生产者和消费者的pv操作,就是生产一个,消费一个,不生成,你就不能消费。

看代码:p操作

package entity;

//生产者
public class P {

	private String lock;

	public P(String lock) {
		super();
		this.lock = lock;
	}

	public void setValue() {
		try {
			synchronized (lock) {
				if (!ValueObject.getValue().equals("")) {
					lock.wait();
				}
				String value = System.currentTimeMillis() + "_"
						+ System.nanoTime();
				System.out.println("set的值是" + value);
				ValueObject.setValue(value);
				lock.notify();
			}

		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

v操作:

package entity;

//消费者
public class C {

	private String lock;

	public C(String lock) {
		super();
		this.lock = lock;
	}

	public void getValue() {
		try {
			synchronized (lock) {
				if (ValueObject.getValue().equals("")) {
					lock.wait();
				}
				System.out.println("get的值是" + ValueObject.getValue());
				ValueObject.setValue("");
				lock.notify();
			}

		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

标记变量类:

package entity;

public class ValueObject {

	private static String value = "";

	public static String getValue() {
		return value;
	}

	public static void setValue(String value) {
		ValueObject.value = value;
	}
	
}


两个包装线程类:

package extthread;

import entity.P;

public class ThreadP extends Thread {

	private P p;

	public ThreadP(P p) {
		super();
		this.p = p;
	}

	@Override
	public void run() {
		while (true) {
			p.setValue();
		}
	}

}

package extthread;

import entity.C;

public class ThreadC extends Thread {

	private C r;

	public ThreadC(C r) {
		super();
		this.r = r;
	}

	@Override
	public void run() {
		while (true) {
			r.getValue();
		}
	}

}

测试类:

package test;

import entity.P;
import entity.C;
import extthread.ThreadP;
import extthread.ThreadC;

public class Run {

	public static void main(String[] args) {

		String lock = new String("");
		P p = new P(lock);
		C r = new C(lock);

		ThreadP pThread = new ThreadP(p);
		ThreadC rThread = new ThreadC(r);

		pThread.start();
		rThread.start();
	}

}


运行结果如下:

get的值是1492050129031_3413254330630
set的值是1492050129031_3413254350825
get的值是1492050129031_3413254350825
set的值是1492050129031_3413254370358
get的值是1492050129031_3413254370358
set的值是1492050129031_3413254390222
get的值是1492050129031_3413254390222

。。。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值