我有一个怀疑UI线程和其他线程之间的相对并发。
Ui主线程更新不同变量的值: - 漂浮 - 长 - 布尔
我有另一个线程读取相同的变量并执行一些逻辑操作(不编辑其值)并使用此操作的结果发送本地广播消息。
是否存在并发问题,我必须使用:synchronized方法和原子变量,或者它无关紧要?
我反思这个问题,因为浮点原语没有原子变量,因为我害怕用错误的代码阻止Ui线程..
编辑:其他问题
读取和写入对于参考变量和大多数都是原子的 原始变量(除了long和double之外的所有类型)。
来自:https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html
那么int,double原型是原子的吗?问题是长期和双重。
例如:
class test
{
int c=0;
long p=0;
new Thread1( new Runnable(){
public void run(){
a=a+c;
p=p+c;
}
}
).start();
new Thread2( new Runnable(){
public void run(){
c=function();
p=functionx();
}
}
).start();
....
}
我必须使用volatile int来解决线程之间的可见性问题,或者它无关紧要?对于long变量,我应该使用atomicLong,因为long原语上的操作不是原子的吗?
p.s:我真的不了解线程之间的变量可见性问题
答案 0 :(得分:1)
看看我给出的另一个答案SO你可能需要的是使变量变为volatile。 UI线程,而不是UI线程,线程是一个线程。修改UI线程上的变量的重要性在于将显示变量。你正在做的是将修改后的值发送到其他地方。
根据我对你的问题的理解:只是让变量变得不稳定,你应该没事。