线程之间如何调用变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程之间如何调用变量相关的知识,希望对你有一定的参考价值。

如楼上所说,线程的局部变量是无法互相调用的,可以声明一些全局变量。但需要在声明的时候bool前面加volatile,如果不加,很有可能你在2个线程中访问同一个变量时,2个变量的值是不一样的,因为编译器会进行优化。简单点说就是编译器在进行2个线程的处理时,都将该变量读入一个临时内存保存起来,在使用时直接使用,因为这样速度更快,而在变量前加volatile的目的是告诉编译器不要优化这个变量,每次使用他时,都从寄存器中读取,所以一当这个变量的值有变动时,只要有对它进行访问,都能拿到最新的数据。
如volatile bool IsNextData;
否则编译器会进行优化
IsNextData直接从寄存器中取值,而不访问内存。
而你在另一个线程中改变的事IsNextData内存中的值。
跟踪也是访问内存的值。
给你百科对volatile的解释:http://baike.baidu.com/view/608706.htm
参考技术A 线程的局部变量是无法互相调用的
可以声明一些全局变量,也可以在堆中用new或malloc分配一些对象, 用于线程间相互访问,
但要做一些线程同步措施,比如临界、信号之类的
参考技术B 方法很多,常用的是定义private变量。

java多线程有几种实现方法?线程之间如何同步

java中多线程的实现方法有两种:
1.直接继承thread类;
2.实现runnable接口;

同步的实现方法有五种:
1.同步方法;
2.同步代码块;
3.使用特殊域变量(volatile)实现线程同步;
4.使用重入锁实现线程同步;
5.使用局部变量实现线程同步 。
其中多线程实现过程中需注意重写或者覆盖run()方法,而对于同步的实现方法中使用较常使用的是利用synchronized编写同步方法和代码块。










以上是关于线程之间如何调用变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在线程之间共享变量?

调用具有条件变量等待的线程对象的析构函数时会发生啥?

如何在线程中调用其他类的成员函数和变量

gevent如何保证多个协程之间不共享同一个线程局部变量

java - 如何在Java中运行类的不同实例的线程之间同步静态变量?

Flask 中的全局变量是线程安全的吗?如何在请求之间共享数据?