java多线程生产者、消费者模型

本文通过一个Java线程同步的示例程序,演示了如何利用synchronized关键字来控制多个线程对共享资源的访问,确保数据的一致性和线程安全。程序包含生产者和消费者线程,它们分别增加和减少共享资源的数量,并通过等待-通知机制避免线程间的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package test;

public class Test {
    public static void main(String[] args) {
    	PublicResource res = new PublicResource();
    	new ProductThread("Thread-0",res).start();
    	new CustomerThread("Thread-1",res).start();
    	new ProductThread("Thread-2",res).start();
    	new CustomerThread("Thread-3",res).start();
    }
}

class PublicResource {
	private int number;
	
	public synchronized void increase() {
		while (number == 10) {
			try {
				System.out.println(Thread.currentThread().getName()+"等于10,等待");
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		number++;
		System.out.println(Thread.currentThread().getName()+"加1,当前number="+number);
		notify();
	}
	
	public synchronized void decrease() {
		while (number == 0) {
			try {
				System.out.println(Thread.currentThread().getName()+"等于0,等待");
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		number--;
		System.out.println(Thread.currentThread().getName()+"减1,当前number="+number);
		notify();
	}
}

class ProductThread extends Thread {
	private PublicResource res;
	
	public ProductThread(String name, PublicResource res) {
		setName(name);
		this.res = res;
	}
	
    public void run() {
    	for (int i=0;i<100;i++) {
    		try {
    			Thread.sleep((long) Math.random()*10000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
            res.increase();
    	}
    }
}

class CustomerThread extends Thread {
	private PublicResource res;
	
	public CustomerThread(String name, PublicResource res) {
		setName(name);
		this.res = res;
	}
	
	public void run() {
    	for (int i=0;i<100;i++) {
    		try {
    			Thread.sleep((long) Math.random()*10000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
            res.decrease();
    	}
    }
}


执行结果:

Thread-1等于0,等待
Thread-3等于0,等待
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-3等于0,等待
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-0加1,当前number=6
Thread-0加1,当前number=7
Thread-0加1,当前number=8
Thread-0加1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-1减1,当前number=8
Thread-1减1,当前number=7
Thread-1减1,当前number=6
Thread-2加1,当前number=7
Thread-3减1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-3减1,当前number=4
Thread-2加1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-1减1,当前number=4
Thread-2加1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-3减1,当前number=4
Thread-2加1,当前number=5
Thread-2加1,当前number=6
Thread-1减1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-1减1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-1减1,当前number=2
Thread-1减1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-2加1,当前number=1
Thread-3减1,当前number=0
Thread-3等于0,等待
Thread-2加1,当前number=1
Thread-1减1,当前number=0
Thread-1等于0,等待
Thread-0加1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-0加1,当前number=2
Thread-1减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-2加1,当前number=2
Thread-0加1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-0加1,当前number=7
Thread-1减1,当前number=6
Thread-0加1,当前number=7
Thread-2加1,当前number=8
Thread-3减1,当前number=7
Thread-2加1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-3减1,当前number=8
Thread-2加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-3减1,当前number=8
Thread-2加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-3减1,当前number=8
Thread-2加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-1减1,当前number=8
Thread-2加1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-2等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-2等于10,等待
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-1减1,当前number=8
Thread-1减1,当前number=7
Thread-1减1,当前number=6
Thread-0加1,当前number=7
Thread-1减1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-0加1,当前number=6
Thread-1减1,当前number=5
Thread-3减1,当前number=4
Thread-2加1,当前number=5
Thread-3减1,当前number=4
Thread-1减1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-2加1,当前number=5
Thread-3减1,当前number=4
Thread-1减1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-2加1,当前number=5
Thread-3减1,当前number=4
Thread-1减1,当前number=3
Thread-0加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-1减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-1减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-0加1,当前number=4
Thread-1减1,当前number=3
Thread-3减1,当前number=2
Thread-2加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-1减1,当前number=2
Thread-3减1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-1减1,当前number=0
Thread-3等于0,等待
Thread-2加1,当前number=1
Thread-3减1,当前number=0
Thread-2加1,当前number=1
Thread-1减1,当前number=0
Thread-1等于0,等待
Thread-0加1,当前number=1
Thread-1减1,当前number=0
Thread-0加1,当前number=1
Thread-2加1,当前number=2
Thread-3减1,当前number=1
Thread-2加1,当前number=2
Thread-0加1,当前number=3
Thread-1减1,当前number=2
Thread-0加1,当前number=3
Thread-2加1,当前number=4
Thread-3减1,当前number=3
Thread-2加1,当前number=4
Thread-0加1,当前number=5
Thread-1减1,当前number=4
Thread-0加1,当前number=5
Thread-2加1,当前number=6
Thread-3减1,当前number=5
Thread-2加1,当前number=6
Thread-0加1,当前number=7
Thread-1减1,当前number=6
Thread-0加1,当前number=7
Thread-2加1,当前number=8
Thread-3减1,当前number=7
Thread-2加1,当前number=8
Thread-0加1,当前number=9
Thread-1减1,当前number=8
Thread-0加1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-0等于10,等待
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-1减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-1减1,当前number=9
Thread-0加1,当前number=10
Thread-2等于10,等待
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-2加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-0加1,当前number=10
Thread-3减1,当前number=9
Thread-3减1,当前number=8
Thread-3减1,当前number=7
Thread-3减1,当前number=6
Thread-3减1,当前number=5
Thread-3减1,当前number=4
Thread-3减1,当前number=3
Thread-3减1,当前number=2
Thread-3减1,当前number=1
Thread-3减1,当前number=0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值