我现在遇到的问题是:用户使用客户端扫码装箱,多个机器同时工作,出现箱号同时被多个机器选中,机器操作完成后会将箱号删除,导致其他选中此箱号的机器所有与箱号有关的操作失败。
解决方法:通过消息队列的技术,将箱号放入队列中,机器扫码时调用方法获取箱号前判断队列是否为空,为空则先添加箱号。
package cn.tedu.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
public class QueueTest2 implements Runnable {
private static Integer a = 1;
// 多线程数量:模拟产线数量
private static final Integer THREAD_COUNT = 10;
private static ArrayList<Integer> list = new ArrayList<Integer>();
/**
* 创建队列,最大容量10,LinkedBlockingDeque是一个由链表结构组成的双向阻塞队列,即可以从队列的两端插入和移除元素。
*/
public static BlockingQueue<String> queue = new LinkedBlockingDeque<String>(20);
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
// 创建线程,模拟多线程频繁访问队列,从队列中取出数据
for (int i = 0; i < THREAD_COUNT; i++) {
&

为了解决多台机器在扫码装箱过程中可能出现的箱号并发冲突,本文提出了使用消息队列的方法。通过将箱号放入队列,机器在扫码时判断队列是否为空,从而确保箱号的安全分配,防止重复选取和操作失败。示例代码展示了如何使用Java的LinkedBlockingDeque实现这一方案。
最低0.47元/天 解锁文章
170万+

被折叠的 条评论
为什么被折叠?



