现象:
单线程读取文件中数据放入ArrayBlockingQueue 类型队列中(数据存储为final Object [] 类型)
Object[] parseLine(line)
{
Object[] result = 。。。;
logger.info(result); // 屏蔽日志打印后读取数据正常
retrun result;
}
final Object[] row = parseLine(line); /
queue.put(row);
另外一个线程从队列中读数据,但是读到的数据有时候正确,有时候为null。
Object[] row = queue.take(); // 此处row大概率读出来为空
关闭sl4j打印final Object [] 类型的数据的代码,读取数据正常
问题分析(纯属猜测):
sl4j打印Object [] 后导致数据被回收(至于为什么被回收,sl4j的classloader和Object [] 类型数据的classloader不同?),所以读线程从队列中读取数据时读到null