Posts tagged: java concurrent

使用BlockingQueue实现简明的JMS连接异常恢复

JMS连接有可能出现异常,对于同步处理(MessageProducer发送或者MessageConsumer调用receive方法)来说,因为是主动调用的,因此可以通过简单的定时重发来重新创建连接。如果是异步接收,即通过实现MessageListener,就比较麻烦,因为是别人回调你的代码。 这里当然需要使用ExceptionListener,来监听jms连接异常。并在异常发生后做一些事情,比如试图恢复连接,如果不能恢复,间隔一段时间再试图连接。 以前做法,是ExceptionListener监听到异常后,在onException方法中设置一个标志对象,另外有一个线程来定时监听这个标志对象,发现异常后做连接的恢复,并重建和注册MessageListener和ExceptionListener到连接。方法比较混乱和复杂。    发送文章为PDF   

星期三 八月 25th, 2010 in , , , | 1 Comment »

通过java concurrent实现定时任务

定时任务有两种: 固定延时的定时任务,即一个任务结束等待固定时间后再执行下一个; 固定频率的定时任务,即任务在固定时常后开始执行。 举个例子,好比列车调度,比如上海到北京的列车,从上海到达北京后,休息10小时再返回,这就相当于固定延时的定时任务;如果从上海出发是下午3点,到达北京后,比如是上午5点,下午3点再返回上海,这就是固定频率的任务。 这里要注意,固定频率定时任务并不会并发,还是用列车调度举例,如果列车晚点,下午4点到北京,固定频率定时任务并不是在下午3点再调度一列新车发往上海,而是延误的列车到京后立即出发返回。而固定延时是即使延误也要休息10小时后再出发。 如果没有java concurrent api,那么就要使用java.util.Timer相关的API,比较繁琐。前者更简明。 日志引用使用BlockingQueue实现简明的JMS连接异常恢复    发送文章为PDF   

星期三 八月 25th, 2010 in , , | No Comments »

使用java concurrent处理并发需求

java5开始,增加了concurrent api,用于并发处理。比如起多个线程并发从网络上下载图片,然后在本地显示。 这里写个简单的代码,来说明如何使用concurrent api提供的线程连接池。 运行结果类似这样: start do 1 task … >>main thread end. start do 2 task … start do 1 finished. start do 3 task … start do 2 finished. start do 3 finished. 这里的task1到task3,都做的同样的事情,让它所属的线程休眠2000ms: private static void doSomething(int id) {     System.out.println("start do " + id + " task …");     try { [...]

星期一 八月 16th, 2010 in , , | No Comments »