如何获取一些订单和多线程读取队列

时间:2014-09-01 08:57:09

标签: java multithreading

在我的应用程序中,我会收到一些用户数据,将它们放入ArrayBlockingQueue中,然后将它们放入数据库中。这里有几个线程用于'从队列中获取数据并将其放入数据库“。然后出现了一个问题。

数据库用于存储每个用户的当前状态,因此数据的时间顺序非常重要。但是当使用多线程'get and put'时,无法确保订单。

所以我提出了一个想法,就像'字段分组':对于不同用户的数据,多线程很好,它们之间的顺序可以忽略; 但每个用户的数据必须由同一个帖子检索。

现在的问题是,我该怎么做?

2 个答案:

答案 0 :(得分: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。使用它来识别线程,仍然需要重用是您必须根据业务逻辑处理的事情。

答案 1 :(得分:0)

尝试使用PriorityBlockingQueue<E><E>应具有可比性。实现逻辑,以便根据所需属性单独对每个用户的数据进行排序。也可以使用线程池而不是离散地管理线程。