/**
* Copyright (c) 2005-2009 springside.org.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
* $Id$
*/
package org.springside.examples.showcase.queue;
/**
* 采用即时阻塞读取Queue中消息策略的Consumer.
*/
public abstract class BlockingConsumer extends QueueConsumer {
/**
* 线程执行函数,阻塞获取消息并调用processMessage()进行处理.
*/
public void run() {
//循环阻塞获取消息直到线程被中断.
try {
while (!Thread.currentThread().isInterrupted()) {
Object message = queue.take();
processMessage(message);
}
} catch (InterruptedException e) {
// Ignore.
} finally {
//退出线程前调用清理函数.
clean();
}
}
/**
* 消息处理函数.
*/
protected abstract void processMessage(Object message);
/**
* 退出清理函数.
*/
protected abstract void clean();
}