在我的应用程序中,我会收到一些用户数据,将它们放入ArrayBlockingQueue中,然后将它们放入数据库中。这里有几个线程用于'从队列中获取数据并将其放入数据库“。然后出现了一个问题。
数据库用于存储每个用户的当前状态,因此数据的时间顺序非常重要。但是当使用多线程'get and put'时,无法确保订单。
所以我提出了一个想法,就像'字段分组':对于不同用户的数据,多线程很好,它们之间的顺序可以忽略; 但每个用户的数据必须由同一个帖子检索。
现在的问题是,我该怎么做?
答案 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>
应具有可比性。实现逻辑,以便根据所需属性单独对每个用户的数据进行排序。也可以使用线程池而不是离散地管理线程。