Java多线程 - 变量未更新

时间:2015-10-04 17:59:28

标签: java multithreading

我在多线程环境中遇到变量问题。

我有3个组件/线程:Controller,Handler,ExternalAgent。

Controller将原始数据交给Handler。处理程序旋转新的ExternalAgent线程以进行进一步处理。一旦完成了它的事情,ExternalAgent就会回到Handler,并将消息添加到链接列表以供Handler进一步处理。

问题是,ExternalAgent添加的消息对Handler内部的某些方法不可见。这是Handler代码:

 public class InboundHandler implements InboundController.Handler {

    private Thread receiver;
    private volatile LinkedList<Message> bufferedMsgs = new LinkedList<Message>();
    private volatile boolean isAlive = true;

    private final static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

    public InboundHandler() {
        receiver = new Thread(this,"receiver");
        receiver.start();
    }

    @Override
    public void run() {
        while (isAlive) {
            processBuffer();
        }
    }

    @Override
    public void process(String msg) {
        Message packet = (Message) new Parser<Message>(Message.class,msg).getObject();
        new ExternalAgent(this,packet).start();

    }

    public void processBuffer() {
        logger.info("Processing buffersize .." + bufferedMsgs.size());

        synchronized (bufferedMsgs) {
            Iterator<Message> it = bufferedMsgs.iterator();
            while (it.hasNext()) {
                //PROCESSING
            }
        }
    }

    public void addMsgToBuffer(Message m) {
        synchronized (bufferedMsgs) {
            bufferedMsgs.addLast(m);
        }
    }

控制器通过process(msg)界面与处理程序对话 ExternalAgent 通过addMsgToBuffer(msg)界面与处理程序对话。

在方法processBuffer()中,LinkedList bufferedMsgs总是显示为空,但如果我在方法addMsgToBuffer()中打印它,它会给我预期的内容。我已经尝试了所有知识,以了解为什么会发生这种情况,但我无法弄明白。

0 个答案:

没有答案