Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android线程并发UI线程编辑变量,其他线程读取相同的变量_Java_Android_Multithreading_Synchronization - Fatal编程技术网

Java Android线程并发UI线程编辑变量,其他线程读取相同的变量

Java Android线程并发UI线程编辑变量,其他线程读取相同的变量,java,android,multithreading,synchronization,Java,Android,Multithreading,Synchronization,我对UI线程和其他线程之间的共存性有一个疑问 Ui主线程更新不同变量的值:-float-long-boolean 我还有另一个线程,它读取同一个变量,并用它执行一些逻辑操作(不编辑它的值),然后用这个操作的结果发送本地广播消息 是否存在并发性问题???我必须使用同步方法和原子变量,或者这无关紧要 我考虑了这个问题,因为float原语并没有原子变量,而且我害怕用错误的代码阻塞Ui线程 那么int,double原语类型是原子的,对吗?问题出在长时间的重复上 例如: class test { 新线程

我对UI线程和其他线程之间的共存性有一个疑问

Ui主线程更新不同变量的值:-float-long-boolean

我还有另一个线程,它读取同一个变量,并用它执行一些逻辑操作(不编辑它的值),然后用这个操作的结果发送本地广播消息

是否存在并发性问题???我必须使用同步方法和原子变量,或者这无关紧要

我考虑了这个问题,因为float原语并没有原子变量,而且我害怕用错误的代码阻塞Ui线程

那么int,double原语类型是原子的,对吗?问题出在长时间的重复上

例如:

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();

....