我有一个关于从另一个线程访问主线程上的对象的问题。似乎有很多关于它的信息在线,有技术可以做到这一点,但我发现的一切都适用于访问UI线程上的视图。可能所有这些技术也适用于除View以外的对象,但我只想确定。
对于我的具体示例,我有一个我编写的自定义BluetoothDeviceConection
类,其中包含connect
,closeConnection
,write
等函数。因此,用于管理与特定BluetoothDevice
的连接的函数将作为参数传递给BluetoothDeviceConection
的构造函数。在我的主线程上,我为三个设备创建了三个BluetoothDeviceConection
个对象。现在我想连接所有三个设备。
我的想法是将设备的BluetoothDeviceConection
对象发送到新线程,让它连接到该设备并向其写入数据,从而操纵/修改/访问传递的BluetoothDeviceConection
对象。为了使此线程安全,将使用BluetoothDeviceConection
关键字创建每个volatile
对象。
这是正确的方法吗?
我正在使用TimerTask执行类似的操作,我在其中调用标记为synchronized
的“外部”函数,一切正常。
提前感谢您的帮助。
干杯!
答案 0 :(得分:0)
不,volatile
本身不保证线程安全。 volatile
只告诉编译器这个值可以从多个线程更改,因此它不会根据静态代码分析应用优化。如果您希望它是线程安全的,您需要使用synchronized
,如您所说的TimerTask
或其他方法(锁,信号量,互斥...),以确保只有一个线程正在访问它在任何给定的时间。
我还建议不要将BluetoothDeviceConection
作为参数传递给其他类,而是将此对象包装在另一个类中,并编写用于操作它的线程安全方法。
答案 1 :(得分:0)
与TimerTask相同,你自己的类可以正常工作