我正在写一些日志,我想要它同步。它用于多线程摆动应用程序处理一些市场价格信息。当有大量的即将到来的价格时,它无法正确记录日志。它只产生部分日志(部分行,甚至部分单词等)。
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());
}
}
我找不到,是什么导致了日志中的部分单词,行等?