2015-01-21 55 views
0

我知道LMAX干擾器是一個高性能的線程間消息傳遞庫。 但是當我嘗試使用它時,我發現eventhandler使用回調方法來處理數據。(LMAX disruptor)如何通過我自己而不是通過回調來獲取數據?

void onEvent(T event, 
     long sequence, 
     boolean endOfBatch) 
     throws java.lang.Exception 

時,發行商已發行將事件RingBuffer

調用,但如果我不使用回調來獲取數據,我寫了一個(真)由我自己來獲取數據,又該我做 ?

謝謝!

+0

你的問題並不清楚 - 你想達到什麼目的?你的「自己的方法」是什麼意思? – Paolo 2015-01-21 12:02:15

+0

@Paolo,我不想用回調的方式來獲取數據,我想用while(true)來獲取數據,我該怎麼辦?謝謝。 – 2015-01-21 12:10:16

+0

您應該編寫回調函數,以便將事件推入隊列。然後您可以在隊列中循環。 – OldCurmudgeon 2015-01-21 12:20:15

回答

0

您應該編寫回調函數,以便將事件推入隊列。然後您可以遍歷隊列。

Queue<Event> queue = new ArrayBlockingQueue(10); 

void onEvent(Event event, 
     long sequence, 
     boolean endOfBatch) 
     throws java.lang.Exception { 
    queue.add(event); 
} 

public void test() { 
    for (Event event : queue) { 
     // Your stuff here. 
    } 
} 
+0

這樣會減慢處理速度嗎? – 2015-01-21 13:22:41

+0

@davidzhao - 當然它可以 - 如果你需要最高速度,去裸機和使用回調 - 如果你需要這樣做一些flim-flam,你必須期待一個缺點。這就是說 - 速度不應該太快 - 可能無法衡量。 – OldCurmudgeon 2015-01-21 13:47:22

相關問題