Android - 再一次“从不同的线程访问对象”

时间:2013-11-10 13:03:22

标签: android multithreading

我有一个关于从另一个线程访问主线程上的对象的问题。似乎有很多关于它的信息在线,有技术可以做到这一点,但我发现的一切都适用于访问UI线程上的视图。可能所有这些技术也适用于除View以外的对象,但我只想确定。

对于我的具体示例,我有一个我编写的自定义BluetoothDeviceConection类,其中包含connectcloseConnectionwrite等函数。因此,用于管理与特定BluetoothDevice的连接的函数将作为参数传递给BluetoothDeviceConection的构造函数。在我的主线程上,我为三个设备创建了三个BluetoothDeviceConection个对象。现在我想连接所有三个设备。

我的想法是将设备的BluetoothDeviceConection对象发送到新线程,让它连接到该设备并向其写入数据,从而操纵/修改/访问传递的BluetoothDeviceConection对象。为了使此线程安全,将使用BluetoothDeviceConection关键字创建每个volatile对象。

这是正确的方法吗?

我正在使用TimerTask执行类似的操作,我在其中调用标记为synchronized的“外部”函数,一切正常。

提前感谢您的帮助。

干杯!

2 个答案:

答案 0 :(得分:0)

不,volatile本身不保证线程安全。 volatile只告诉编译器这个值可以从多个线程更改,因此它不会根据静态代码分析应用优化。如果您希望它是线程安全的,您需要使用synchronized,如您所说的TimerTask或其他方法(锁,信号量,互斥...),以确保只有一个线程正在访问它在任何给定的时间。

我还建议不要将BluetoothDeviceConection作为参数传递给其他类,而是将此对象包装在另一个类中,并编写用于操作它的线程安全方法。

答案 1 :(得分:0)

与TimerTask相同,你自己的类可以正常工作