「线程变量java」线程变量可见性
今天给各位分享线程变量java的知识,其中也会对线程变量可见性进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、JAVA线程本地变量ThreadLocal和私有变量的区别
- 2、java多线程共享变量
- 3、java中开启子线程后主线程中传入的变量不变
- 4、java 中 线程A能否读取线程B中的一个变量?如何读取?
- 5、Java中对线程间的变量访问也需要同步控制
- 6、java 如何获取一个线程中的变量
JAVA线程本地变量ThreadLocal和私有变量的区别
ThreadLocal变量 作用域是各自线程内部。私有变量作用域 属于该类的实例。
所以, ThreadLocal变量 只用于线程内部共享,是线程安全的。
私有变量线程不安全,例如,利用一个Runnable实例启动2个线程,这2个线程就可以共同拥有 私有变量。
java多线程共享变量
两个线程同时获取变量,
获取之后.第一个线程++操作,然后进入睡眠.
这时,第二个线程,也获取到了,做--操作.睡眠.
第一个线程醒来打印的是做过2次运算的数据(++,--)所以是0
第二线程也一样.
这涉及到多线程安全问题.
java中开启子线程后主线程中传入的变量不变
使用回调,变量改变。
在主线程中对类C的实变量进行设置,然后输出变量开启子线程,通过构造函数传入变量,在子线程中改变变量的值子线程中调用主线程的静态方法传递数据给主线程说明子线程执行结束子线程结束后在主线程中查看变量已经发生改变。
每个线程都有一个唯一标示符,来区分线程中的主次关系的说法, 线程唯一标示符,Thread.CurrentThread.ManagedThreadID。
java 中 线程A能否读取线程B中的一个变量?如何读取?
可以啊,如果仅仅只是读取的话,就像从
对象
A
里面读取对象
B
的变量一样操作就行了。
如果涉及到修改的话就要考虑同步问题了。
Java中对线程间的变量访问也需要同步控制
一个简单的计数器 本来以为不需要同步保护 后来发现不行 还是得加上 程序
public class TestMain {
int i = ; //计数器初始值为
public static void main(String[] args) {
TestMain c = new TestMain();
Worker x = new Worker(c);
for (int i= ; i ; i++) { // 个线程
new Thread(x) start();
}
while (true) { //每隔一秒中输出计数器的值
System out println(c i);
try {
Thread sleep( );
} catch (InterruptedException e) {
}
}
}
}
class Worker implements Runnable {
TestMain c;
public Worker(TestMain c) {
this c = c;
}
public void run() {
try {
Thread sleep((int)(Math random() * )); //随机Sleep一段时间
} catch (InterruptedException e) {
}
c i++; //计数器自增 问题在这里 并发写入
}
}
上面的程序 %的几率结果是 其余的是
c i++一句需要并发保护
本来我以为Java里面++是原子的呢 呵呵
lishixinzhi/Article/program/Java/gj/201311/11157
java 如何获取一个线程中的变量
你把他设置为私有的,当然获取不了了,可以修改为public或者为该对象增加get,set方法
线程变量java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于线程变量可见性、线程变量java的信息别忘了在本站进行查找喔。