我创建并开始一个新线程。有人可以确认通常声明的类的全局变量(即private int x = 5)在另一个线程中是否可读?
我正在创建一个服务,在返回onStartCommand之前,我通过新的Thread(new Analyzing())启动我的新线程.start()其中,Analyzing是实现Runnable的服务的某个类。
通过调试我看到当新线程启动并在run()中运行代码时,全局变量被重置。
多线程的ABC说线程共享代码和数据,我不明白这种行为。
此处的代码:http://pastebin.com/wiuwm1gf
谢谢!
答案 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
再见