Java并发线程

本文通过消费者-生产者模型的实例演示了Java中线程如何使用wait()和notify()进行协作,确保仓库中有商品可供消费且有足够的空间存放新商品。

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

      在现实生活中,线程往往需要互相协作才可以更好的运行,比如,消费者--生产者模型,消费者往仓库中取商品时,仓库中得有商品才能实现,否则消费者进入等待状态,而生产者得不到仓库的占用权,无法将商品放入仓库,此时消费者就会进入无限等待状态。同理,生产者往仓库放入商品,仓库得有空间去存放商品,当仓库没有空间时,生产者会进入等待状态,而消费者得不到仓库的占用权,无法取出商品,此时生产者就会进入无线等待状态。

      为了解决这个问题,Java中采用了wait(),notify()这两种线程协作方式,前者为等待,后者为通知,当消费者取出商品时,生产者会通知消费者放入商品,而生产者在仓库没有空间时,会进入等待状态,通知消费者取出商品。

For Example:

package Test2;

import java.util.ArrayList;

public class Main {
	  public static  ArrayList<Integer> al = new ArrayList<Integer>();
	 
	public static void main(String[] args) {
		Consume cs = new Consume(al);
		
		Produce pd = new Produce(al);
		
		cs.start();
		
		pd.start();
		
		
		
	}

}



package Test2;

import java.util.ArrayList;

public class Consume extends Thread{
	ArrayList<Integer> al;
	
	public Consume(	ArrayList<Integer> al)
	{
		this.al = al;
		
	}
	

	public void run() {
		while(true)
		{
			synchronized (al) {
				while(al.size() == 0)
				{
					 try {
	                     System.out.println("仓库为空,进入等待状态");
	                     al.wait();
	                 } catch (InterruptedException e) {
	                     e.printStackTrace();
	                     al.notify();
	                 }
					
				}
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				al.remove(al.size()-1);
				al.notify();
				System.out.println("已取出商品");
			}
			}
					
		
	}

}


package Test2;

import java.util.ArrayList;

public class Produce extends Thread{
	
	ArrayList<Integer> al;
	int count = 1;
	public Produce(ArrayList<Integer> al)
	{
		this.al = al;
		
	}

	public void run() {
		
		while(true)
		{
			synchronized (al) {
				if(al.size() == 2)
				{
					
					try {
						System.out.println("仓库已满,进入等待状态");
						al.wait();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
						al.notify();
					}
				}
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				al.add(count);
				al.notify();
				System.out.println("已经生产"+count+"商品");
				count ++;
				
			}			
			}
			
		
	}

}


结果为:

 

仓库为空,进入等待状态
已经生产1商品
已取出商品
已经生产2商品
已取出商品
已经生产3商品
已经生产4商品
已取出商品
已取出商品
仓库为空,进入等待状态
已经生产5商品
已经生产6商品
仓库已满,进入等待状态
已取出商品
已经生产7商品
仓库已满,进入等待状态
已取出商品
已经生产8商品
仓库已满,进入等待状态
已取出商品

 

内容概要:本文深入探讨了金属氢化物(MH)储氢系统在燃料电池汽车中的应用,通过建立吸收/释放氢气的动态模型和热交换模型,结合实验测试分析了不同反应条件下的性能表现。研究表明,低温环境有利于氢气吸收,高温则促进氢气释放;提高氢气流速和降低储氢材料体积分数能提升系统效率。论文还详细介绍了换热系统结构、动态性能数学模型、吸放氢特性仿真分析、热交换系统优化设计、系统控制策略优化以及工程验证与误差分析。此外,通过三维动态建模、换热结构对比分析、系统级性能优化等手段,进一步验证了金属氢化物储氢系统的关键性能特征,并提出了具体的优化设计方案。 适用人群:从事氢能技术研发的科研人员、工程师及相关领域的研究生。 使用场景及目标:①为储氢罐热管理设计提供理论依据;②推动车载储氢技术的发展;③为金属氢化物储氢系统的工程应用提供量化依据;④优化储氢系统的操作参数和结构设计。 其他说明:该研究不仅通过建模仿真全面验证了论文实验结论,还提出了具体的操作参数优化建议,如吸氢阶段维持25-30°C,氢气流速0.012g/s;放氢阶段快速升温至70-75°C,水速18-20g/min。同时,文章还强调了安全考虑,如最高工作压力限制在5bar以下,温度传感器冗余设计等。未来的研究方向包括多尺度建模、新型换热结构和智能控制等方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值