问题描述
下面是自己封闭的list然后申明了一个同步List类。后面在程序中申明了这个类的一个静态对象如下:publicstaticJobQueuequeue=newJobQueue(1000);然后程序中放数据跟取数据分别用的是下面的方法放数据:SendControlThread.queue.addJob(cmop);取数据:objEx=SendControlThread.queue.getJob();请问会不会出现捞数据的线程跟发送的线程都wait的情况或者还是其他问题。一个捞取线程。6个取数据的线程。publicclassJobQueue{//自己封装LISTpublicLoggerlog=LogFactory.getLogger(LogFactory.SMC);publicListDataList=newLinkedList();privateintcapacity;publicJobQueue(intcapacity){this.capacity=capacity;}publicvoidaddJob(Objectobj){synchronized(DataList){DataList.notifyAll();while(DataList.size()>=capacity){try{log.info("-addJob--此线程要睡眠-->"+Thread.currentThread().getName());DataList.wait();while(DataList.size()>=capacity/2){DataList.wait();}}catch(InterruptedExceptione){log.error("JobQueue中addJob出错详情查看日志",e);}}log.info("-addJob--此线程唤醒-->"+Thread.currentThread().getName()+"数据是:"+obj.toString());DataList.add(obj);//DataList.notifyAll();}}publicObjectgetJob(){synchronized(DataList){DataList.notifyAll();while(DataList.size()==0){try{log.info("--getJob-此线程要睡眠-->"+Thread.currentThread().getName());DataList.wait();}catch(InterruptedExceptione){log.error("JobQueue中getJob出错详情查看日志",e);}}log.info("-getJob--此线程唤醒-->"+Thread.currentThread().getName());Objectjob=DataList.remove(0);//Objectjob=DataList.get(0);//DataList.notifyAll();returnjob;}}publicintgetJobCount(){synchronized(DataList){returnDataList.size();}}}