非法监控状态exception
如何将轮询线程传递给另一个线程进行处理。 程序执行在一个控制器类中,它有一个main方法和一个线程池:
主类控制器
public static void main(String[] args) throws InterruptedException { RunnableController controller = new RunnableController(); System.out.println(incomingQueue.size()); controller.initializeDb(); controller.initialiseThreads(); System.out.println("Polling"); controller.initialUpdate(); }
具有轮询类的线程的方法
private void initialiseThreads() { try { threadExecutorRead = Executors.newFixedThreadPool(10); PollingSynchronizer reader = new PollingSynchronizer(incomingQueue,dbConnection); threadExecutorRead.submit(reader); }catch (Exception e){ e.printStackTrace(); } }
具有proccesor类的线程的方法
private void initialUpdate() { RunnableController.outgoingQueue = incomingQueue; if((RunnableController.outgoingQueue)!= null){ try { threadExecutorFetch = Executors.newFixedThreadPool(10); MessageProcessor updater = new MessageProcessor(outgoingQueue, dbConnection); threadExecutorFetch.submit(updater); DBhandler dbhandler = new DBhandler(); dbhandler.updateDb(getOutgoingQueue()); } catch (Exception e) { } } }
Poller类和控制器类
public void run() {// Thread in the Poller class int seqId = 0; while(true) { List list = null; try { list = fullPoll(seqId); if (!list.isEmpty()) { seqId = list.get(0).getSequence(); incomingQueue.addAll(list); this.outgoingQueue = incomingQueue; System.out.println("waiting"); System.out.println("new incoming message"); while(true){ wait(3000); notify(); } } } catch (Exception e1) { e1.printStackTrace(); } } } public void run() {// Second thread in the Processor Class synchronized (this){ RunnableController.setOutgoingQueue(generate(outgoingQueue)); } notify(); } }
我的任务和问题是:
1.控制器应该处理线程Poller和处理器,它应该只调用轮询器和处理器线程
2.现在我的问题是如何使轮询线程等待3秒并且顺式通知处理器。
我得到的错误如下:
java.lang.IllegalMonitorStateException at java.lang.Object.wait(Native Method) at PollingSynchronizer.run(PollingSynchronizer.java:76) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
这里如何实现异步处理?
你需要先阅读这样的东西。 如果不保持对象的监视器,则不能使用wait()
。 此外,从简短的一瞥看,您似乎在multithreading上下文中使用非最终静态成员。 尝试使该线程安全。
- 构造函数中的exception
- Selenium UnreachableBrowserException – Java
- ibatis spring java.lang.NoSuchMethodError com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse
- MyClass无法强制转换为java.lang.Comparable:java.lang.ClassCastException
- Java未选中/已检查exception澄清
- 你能弄清楚为什么这个程序会触发IllegalStateException吗?
- 在某个INPUT值之后获取ArrayIndexOutOfBoundsException
- 使用JUnit 4的预期exception机制导致意外行为的原因?
- 为什么运行时exception是未经检查的exception?