我試圖實現的OSGi服務應該從另一個bundle等待傳入的數據,當它接收它處理數據。 我使用的是LinkedBlockingQueue
,因爲我不知道我會收到多少個數據包。 我的代碼如下所示:LinkedBlockingQueue.take()似乎是閒着
public class MyClass {
protected static LinkedBlockingQueue<JSONObject> inputQueue = new LinkedBlockingQueue<JSONObject>();
private ExecutorService workerpool = Executors.newFixedThreadPool(4);
public void startMyBundle() {
start();
}
protected void start() {
new Thread(new Runnable() {
public void run() {
while(true){
workerpool.execute(new Runnable() {
public void run() {
try {
process(inputQueue.take());
} catch (InterruptedException e) {
System.out.println("thread was interrupted.");
}
}
});
}
}
}).start();
}
public void transmitIn(JSONObject packet) {
try {
inputQueue.put(packet);
} catch (InterruptedException e) {
}
}
protected void process(JSONObject packet) {
//Some processing
}
當我運行此,只發送一個數據包到服務,該分組首先和處理,因爲它應該,但後來我的處理器使用其所有能力最當時我得到一個OutOfMemoryError
看起來像這樣:
java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "[Timer] - Periodical Task (Bundle 46) (Bundle 46)"
可以。這是什麼原因?