java SwingWorker中的异步日志记录

时间:2014-09-02 05:43:16

标签: java swing swingworker

我正在写一些日志,我想要它同步。它用于多线程摆动应用程序处理一些市场价格信息。当有大量的即将到来的价格时,它无法正确记录日志。它只产生部分日志(部分行,甚至部分单词等)。

class ReceiveLMAXPriceFeedTask extends SwingWorker<Void, Void> 
{
  ...
  ...
  private StringBuilder _log;
  private StringBuilder log;

  public ReceiveLMAXPriceFeedTask()
  {
     ...
     ...
     _log = new StringBuilder(20000);
     log = new StringBuilder(20000);
  }

  and in place i want to write somethig

  ...
  {
    _log.append("xxxxx\n");
    _log.append("xxxxx");
  }

  public Void doInBackground() 
  {
    ...
    ...
    while (!isCancelled())
    {  
      ...
      ...
      Thread.yield();
      if ((_log.length() > 0) && (log.length() == 0))
      {
        log.append(_log.toString());
        firePropertyChange("tradesLog","","trades log changed");
        _log.delete(0, _log.length());
      }
    }
}

在UI的代码中

/**
 * Invoked when any task asks for UI update.
*/

public void propertyChange(PropertyChangeEvent evt) {
  ...
  ...
  else if ("tradesLog" == evt.getPropertyName())
  {
    try
        {
            if ((receiveLMAXPriceFeedTask != null) && (receiveLMAXPriceFeedTask.log != null) && (receiveLMAXPriceFeedTask.log.length() > 0))
            {
                bufferedTradesWriter.write(receiveLMAXPriceFeedTask.log.toString());
                bufferedTradesWriter.flush();
                receiveLMAXPriceFeedTask.log.delete(0, receiveLMAXPriceFeedTask.log.length());
            }
        }
        catch (IOException ex) 
        {
            System.out.println("problem accessing file" + TradesCSVFilePath.getText());
        }            
    }

我找不到,是什么导致了日志中的部分单词,行等?

0 个答案:

没有答案