我有一个在大约 150 台计算机上运行在 WinXP 上的 Swing GUI 应用程序(每台计算机的配置相同)。
但在其中一些(如 5)上,当应用程序尝试通过 RXTX(pos 打印机)与串行端口通信时,java cpu 使用率上升到近 100%,因此阻塞了整个机器。
此串行端口上的写入是在特定线程中完成的。其中一个看起来像这样:
... queries on the hsql database
... writing results in a byte array called "stream"
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM2");
serialPort = (SerialPort) portId.open("Sending", 2000);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
OutputStream out = serialPort.getOutputStream();
out.write(stream);
out.close();
serialPort.close();
在编写之前我首先认为查询存在问题,但我的应用程序在其他线程中执行了很多查询并且没有此类问题。
在这些计算机上,打印时间是可变的(最多 10 分钟,在此期间机器被阻塞)。在其他计算机上,打印在 2 秒内完成,而不会增加 CPU 使用率。
你有什么想法从哪里来的这个问题?