java 多生产和多消费问题_一个生产者和多个消费者的互斥问题

运行后,消费者一直处于waiting状态,请问该怎么解决

我的想法:

生产者,因为使用list存放数据,直接添加数据就好;而消费者使用后,再删除使用数据

List licenses = (ArrayList)obj;

pool.addLicenses(licenses);

消费者线程,其中pool为数据池:public void run() {

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS");

TimeZone t = sdf.getTimeZone();

t.setRawOffset(0);

sdf.setTimeZone(t);    synchronized(pool) {

while (true) {

String license = pool.getLicense();

System.out.println("Get "+license);

}

}

以下是数据池,使用list存放数据

package com.traffic.cache;

import java.util.ArrayList;

import java.util.List;

public class LicensePool {private List licenses = new ArrayList();

public LicensePool() {

}

public synchronized void addLicenses(List license) {

licenses.addAll(license);

notifyAll();

}

public synchronized String getLicense(){

while(!haveLicense()) {

try {

System.out.println("Waiting");

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

String l = licenses.get(0);

System.out.println(l);

licenses.remove(0);

return l;

}

public boolean haveLicense() {

if(licenses.isEmpty()){

return false;

}

return true;

}

public int getSize() {

return licenses.size();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值