android可运行服务中的多线程

时间:2014-05-05 17:16:13

标签: java android multithreading

我创建并开始一个新线程。有人可以确认通常声明的类的全局变量(即private int x = 5)在另一个线程中是否可读?

我正在创建一个服务,在返回onStartCommand之前,我通过新的Thread(new Analyzing())启动我的新线程.start()其中,Analyzing是实现Runnable的服务的某个类。

通过调试我看到当新线程启动并在run()中运行代码时,全局变量被重置。

多线程的ABC说线程共享代码和数据,我不明白这种行为。

此处的代码:http://pastebin.com/wiuwm1gf

谢谢!

2 个答案:

答案 0 :(得分:0)

  

有人可以确认通常声明的类的全局变量(即private int x = 5)在另一个线程中是否可读?

类级别的公共全局变量(实例或static)可由其他线程读取,但无法保证读取后您将获得什么值。为确保可见性保证,通常需要创建此变量volatile。请考虑阅读this article以获取更多信息。

答案 1 :(得分:0)

  

有人可以确认通常声明的类的全局变量(即> private int x = 5)在另一个线程中是否可读?

它是可见的,但是当不能保证修改的普通值可用于其他线程时。你应该让它变得不稳定。 Java volatile关键字用于将Java变量标记为“存储在主存储器中”。这意味着每次读取一个volatile变量都将从计算机的主内存中读取,而不是从CPU缓存中读取,并且每次写入volatile变量都将写入主内存,而不仅仅是CPU缓存。 我建议你这篇文章/链接:

http://tutorials.jenkov.com/java-concurrency/volatile.html

java: are global variables visible in threads

再见