2014-09-01 40 views
0

在我的應用程序中,我會收到一些用戶數據,將它們放入ArrayBlockingQueue,然後將它們放入數據庫中。這裏有幾個線程用於'從隊列獲取數據並將其放入數據庫'。然後出現了一個問題。我怎樣才能獲得一些訂單和多線程閱讀隊列

數據庫用於存儲每個用戶的當前狀態,因此數據的時間順序非常重要。但是當使用多線程'取放'時,順序不能得到保證。

所以我想出了一個想法,就像'字段分組':對於不同用戶的數據,多線程很好,它們之間的順序可以忽略; 但每個用戶的數據必須由同一個線程檢索。

現在的問題是,我該怎麼做?

+0

爲什麼不使用HTTP會話? – 2014-09-01 09:07:34

+0

查看[由Heinz M. Kabutz博士提供的條紋執行者服務](http://www.javaspecialists.eu/archive/Issue206.html) – OldCurmudgeon 2014-09-01 09:43:21

回答

0

用戶數量是否有限?然後,您可以簡單地緩存每個用戶的線程。

// thread cache 
    Map<Sting, Thread> threadcache = new HashMap<String,Thread>(); 
    threadcache.put("primary_key", t); 
    // when accessing the daya 
    Thread torun = threadcache.get(queue.peek()); 
    torun.start(); 

其他

Java線程需要名Thread.setName()/的getName。根據您的業務邏輯,使用它來標識線程,仍然需要重用。

0

嘗試使用PriorityBlockingQueue<E><E>應該是可比較的。實施邏輯,以便每個用戶的數據按照所需屬性單獨排序。也可以使用線程池而不是離散管理線程。