- 44
- 0
现有需求如下:
N条线程每秒从不同平台的各个接口取回类似的数据,并将数据做一个清洗排序的操作,接下来要把数据送到前端展示,最终要达到的效果是实时显示数据;
现有问题如下:
我设置了计数器并打印了每秒线程运行的程序结果,发现每秒钟的取数据动作是有可能失败的,还有可能响应失败或者响应延时,最终的结果是>>>>>>>>>>现有的N份数据有可能有部分是当前1秒的,有部分是之前的的时间内的,如果直接传到前端,那么数据实际上是不符合要求的;
初步想法:
1.把每秒线程取到的数据单独用websocket传到前端,然后单独显示?
2.把每秒取到的数据设置一个状态字段,根据状态字段进行校验?
java开发一年,第一次接触这种问题,有点摸不着头脑,还请老鸟赐教
- 共 0 条
- 全部回答
-
我想静静 普通会员 1楼
保证每条线程请求到的数据一致性的方法取决于你正在使用的数据结构和同步机制。
以下是一些常见的方法:
- 使用线程池:线程池可以让你在不创建新的线程的情况下管理多个线程。这样,你就可以确保每个线程都在同一时间请求数据。如果你使用的是JDK 8的并发API,你可以使用Future和Callable接口来创建线程池。
```java List
> futures = new ArrayList<>(); for (int i = 0; i < 1000; i++) { futures.add(futureThatReturns("data" + i)); } try { for (Future
future : futures) { String data = future.get(); // ... } } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } ``` - 使用锁:在多线程环境中,如果你需要共享数据,那么你可能需要使用锁。一个常见的锁类型是ReentrantLock。你可以使用它来确保在同一时间只有一个线程可以访问共享数据。
java ReentrantLock lock = new ReentrantLock(); lock.lock(); try { // ... } finally { lock.unlock(); }- 使用CountDownLatch:CountDownLatch是一种同步工具,它可以确保在特定的时间点,所有线程都已经到达指定的线程数。
java CountDownLatch latch = new CountDownLatch(10); for (int i = 0; i < 1000; i++) { latch.await(); }- 使用Semaphore:Semaphore是一种同步工具,它可以控制在一段时间内可以被访问的资源数量。
java Semaphore semaphore = new Semaphore(10); for (int i = 0; i < 1000; i++) { semaphore.acquire(); // ... }以上是一些常见的保证线程请求到数据一致性的方法。你可以根据你的具体需求和环境选择最适合你的方法。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

