Android Concurrent:UI线程编辑变量和其他线程读取相同的变量

时间:2015-04-12 16:26:10

标签: java android multithreading concurrency synchronization

我有一个怀疑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:我真的不了解线程之间的变量可见性问题

1 个答案:

答案 0 :(得分:1)

看看我给出的另一个答案SO你可能需要的是使变量变为volatile。 UI线程,而不是UI线程,线程是一个线程。修改UI线程上的变量的重要性在于将显示变量。你正在做的是将修改后的值发送到其他地方。

根据我对你的问题的理解:只是让变量变得不稳定,你应该没事。

相关问题