Java Android线程并发UI线程编辑变量,其他线程读取相同的变量
我对UI线程和其他线程之间的共存性有一个疑问 Ui主线程更新不同变量的值:-float-long-boolean 我还有另一个线程,它读取同一个变量,并用它执行一些逻辑操作(不编辑它的值),然后用这个操作的结果发送本地广播消息 是否存在并发性问题???我必须使用同步方法和原子变量,或者这无关紧要 我考虑了这个问题,因为float原语并没有原子变量,而且我害怕用错误的代码阻塞Ui线程 那么int,double原语类型是原子的,对吗?问题出在长时间的重复上 例如:Java Android线程并发UI线程编辑变量,其他线程读取相同的变量,java,android,multithreading,synchronization,Java,Android,Multithreading,Synchronization,我对UI线程和其他线程之间的共存性有一个疑问 Ui主线程更新不同变量的值:-float-long-boolean 我还有另一个线程,它读取同一个变量,并用它执行一些逻辑操作(不编辑它的值),然后用这个操作的结果发送本地广播消息 是否存在并发性问题???我必须使用同步方法和原子变量,或者这无关紧要 我考虑了这个问题,因为float原语并没有原子变量,而且我害怕用错误的代码阻塞Ui线程 那么int,double原语类型是原子的,对吗?问题出在长时间的重复上 例如: class test { 新线程
class test
{
新线程2(新的可运行(){
}
我有一个疑问,UI线程和其他线程之间是相对并发的
Ui主线程更新不同变量的值:-float-long-boolean
我还有另一个线程,它读取同一个变量,并用它执行一些逻辑操作(不编辑它的值),然后用这个操作的结果发送本地广播消息
是否存在并发问题,我必须使用:同步方法和原子变量,还是不重要
我考虑了这个问题,因为float原语并没有原子变量,而且我害怕用错误的代码阻塞Ui线程
编辑:其他问题
对于引用变量和大多数基本变量(除long和double之外的所有类型),读和写都是原子的
发件人:
那么int,double原语类型是原子的吗?问题是long和double
例如:
课堂测试
{
新线程2(新的可运行(){
}
对于线程之间的可见性问题,我必须使用volatile int还是无关紧要?对于long变量,我应该使用atomicLong,因为long原语上的操作不是原子的
p、 s:作为一条经验法则,我并不真正理解线程之间的变量可见性问题。如果一个变量的新值取决于它的旧值,即
p=p+5
,那么单靠volatile是不够的。你可能应该看看AtomicXXX
类
是的,您的代码中会有一个竞争条件。“因为浮点基元没有原子变量”-嗯,这不是一个真正的参数。有一个类可以原子地获取/设置几乎任何类型的对象。
int c=0;
long p=0;
new Thread1( new Runnable(){
public void run(){
a=a+c;
p=p+c;
}
}
).start();
public void run(){
c=function();
p=functionx();
}
}
).start();
....
int c=0;
long p=0;
new Thread1( new Runnable(){
public void run(){
a=a+c;
p=p+c;
}
}
).start();
public void run(){
c=function();
p=functionx();
}
}
).start();
....