0

我有一个关于从另一个线程访问主线程上的对象的问题。网上似乎有很多关于它的信息以及相关技术,但我发现的所有内容都适用于访问 UI 线程上的视图。可能所有这些技术也适用于 View 以外的对象,但我想确定一下。

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

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

这是正确的方法吗?

我正在使用 TimerTask 做类似的事情,我在其中调用标记为的“外部”函数synchronized,一切正常。

预先感谢您的所有帮助。

干杯!

4

2 回答 2

0

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

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

于 2013-11-10T13:18:04.317 回答
0

与 TimerTask 相同,您自己的课程可以正常工作

于 2013-11-10T13:18:58.510 回答