Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.isea.data;
- import java.util.concurrent.locks.Condition;
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- /**
- * 线程操作资源类
- * 判断,干活,唤醒
- * 虚假唤醒
- *
- * 生产者消费者问题,交替消费和生产,两个生产者,两个消费者
- */
- class ShareData{
- private int data = 0;
- Lock lock = new ReentrantLock();
- Condition condition = lock.newCondition();
- public void produce() throws InterruptedException {
- lock.lock();
- try {
- while (data != 0){
- condition.await();
- }
- data ++;
- System.out.println(Thread.currentThread().getName() + "生产了,余量\t" + data);
- condition.signalAll();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- lock.unlock();
- }
- }
- public synchronized void consumer() throws InterruptedException {
- lock.lock();
- try {
- while (data == 0){
- condition.await();
- }
- data --;
- System.out.println(Thread.currentThread().getName() + "消费了,余量\t" + data);
- condition.signalAll();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- lock.unlock();
- }
- }
- }
- public class ProduceAndConsumer {
- public static void main(String[] args) {
- ShareData shareData = new ShareData();
- new Thread(() -> {
- for (int i = 0; i < 5; i++) {
- try {
- shareData.produce();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- },"Producer1").start();
- new Thread(() -> {
- for (int i = 0; i < 5; i++) {
- try {
- shareData.consumer();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- },"Consumer1").start();
- new Thread(() -> {
- for (int i = 0; i < 5; i++) {
- try {
- shareData.produce();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- },"Producer2").start();
- new Thread(() -> {
- for (int i = 0; i < 5; i++) {
- try {
- shareData.consumer();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- },"Consumer2").start();
- }
- }
- /*
- Producer1生产了,余量 1
- Consumer1消费了,余量 0
- Producer1生产了,余量 1
- Consumer1消费了,余量 0
- Producer1生产了,余量 1
- Consumer1消费了,余量 0
- Producer1生产了,余量 1
- Consumer1消费了,余量 0
- Producer1生产了,余量 1
- Consumer1消费了,余量 0
- Producer2生产了,余量 1
- Consumer2消费了,余量 0
- Producer2生产了,余量 1
- Consumer2消费了,余量 0
- Producer2生产了,余量 1
- Consumer2消费了,余量 0
- Producer2生产了,余量 1
- Consumer2消费了,余量 0
- Producer2生产了,余量 1
- Consumer2消费了,余量 0
- */
Add Comment
Please, Sign In to add comment