我正在开发一款包含对象ArrayList的Android应用。 Arraylist中的每个对象代表我的应用程序所连接的蓝牙设备。
对于Arraylist中的每个设备,正在运行一个执行蓝牙通信的线程。 (我打算将这些线程也放在一个数组中)。
我正在努力的是:将Arraylist-item连接到线程的最佳方式是什么?其他方式?
因为当某些内容更改为Arraylist项时,线程必须传达此更改。当线程接收到通信时,它应该修改它正在“工作”的Arraylist-item。
我一直在考虑的解决方案:
这两个选项似乎都不是最佳解决方案。有谁知道最好的方法是什么?
我还没有真正使用线程和Arraylists。
答案 0 :(得分:1)
或者是一个Ararylist只是一个关于对象引用的列表,它只是排序的列表,但对象仍然存在......
是的,正如您猜测的那样只存储了参考文献。这是因为在Java中你可以拥有only references个对象。
将Arraylist-item连接到线程以及其他方式的最佳方法是什么?
您可以制作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...
}