gpt4 book ai didi

java - 将数组列表项连接到线程以及其他方式的最佳方法

转载 作者:行者123 更新时间:2023-12-01 11:24:12 25 4
gpt4 key购买 nike

我正在开发一个包含对象 ArrayList 的 Android 应用程序。Arraylist 中的每个对象代表我的应用程序连接到的蓝牙设备。

对于 Arraylist 中的每个设备,都有一个正在运行的线程来进行蓝牙通信。 (我也计划将这些线程放入一个数组中)。

我正在努力解决的问题是:将 Arraylist-item 连接到线程和其他方式的最佳方法是什么?

因为当 Arraylist 项发生更改时,线程必须传达此更改。当线程接收到通信时,它应该修改它正在“工作”的 Arraylist-item。

我一直在考虑的解决方案:

  • 我可以为线程和 Arraylist-item 提供一个唯一的 ID,并在其中一个需要另一个时迭代它们的数组/arrylist。但这似乎很慢。
  • 我可以将线程对象添加到 Arraylist 中的自定义设备对象,这样所有内容都在同一个 Arraylist 中。但这感觉不像是我应该做的事情。 Arraylist 会经常进行排序,我不知道排序时是否会重新定位所有数据(=> 这对线程有何影响...)。或者 Ararylist 只是对对象的引用的列表,并且它只是已排序的列表,但对象保持不变...

这两个选项似乎都不是最佳解决方案。有人知道最好的方法是什么吗?

我还没有真正习惯使用线程和数组列表。

最佳答案

Or is an Ararylist just a list off references to the objects and is it only the list that is sorted, but the objects stay put...

是的,正如您所猜测的,仅存储引用。那是因为在 Java 中你可以有 only references到物体。

What is the best way to connect the Arraylist-item to the thread and other way around?

你可以做一个Map<Device, Thread> ,这样你就可以轻松获取 Thread与该对象相关联。对于以其他方式关联,您应该扩展 Thread类来存储对设备的引用。为了确保关联正确,您可以创建自己的由映射支持的关联类,并负责创建和启动线程

public class Association{
private Map<MyDevice, MyThread> map;

public MyThread add(MyDevice device){
MyThread t = new MyThread(device);
map.put(device, t);
return t;
}

public void stopThread(final Device d){
final Thread t = map.get(d);
if(t != null && t.isAlive()){
new Thread( () -> {
t.interrupt();
try{ t.join(); }
catch(InterruptedException ex){}
}).start();

map.remove(d);
}
}

... // Constructor, thread getter, remove logic, sorting...
}

关于java - 将数组列表项连接到线程以及其他方式的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30959280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com