1. 首页 > 科技

另一个线程修改变量,不用volatile修饰,其他线程为什么时而可见时而不可见?

java中对象或者数组用volatile修饰有什么用?

就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier).它是被设计用来修饰被不同线程访问和修改的变量.如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会 volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.

另一个线程修改变量,不用volatile修饰,其他线程为什么时而可见时而不可见?

volatile一般用来修饰结构体中的成员变量吗?

当编译器把c语言翻译成汇编语言时会作一些优化,比如会把用过一次的变量保存在寄存器里,第二次再用到这个变量时就直接读寄存器而不是变量所在的地址.这通常会提高程序的运行效率,但是有些变量会在程序不知道的情况下自动修改自己的值,比如一些寄存器变量.这些变量就有必要用volatile修饰了.volatile是告诉编译器禁止优化.

一个参数可以既是volatile又是const的么?

volatile修饰符告诉complier变量值可以以任何不被程序明确指明的方式改变,最常见的例子就是外部端口的值,它的变化可以不用程序内的任何赋值语句就有可能改变的,这种变量就可以用volatile来修饰,complier不会优化掉它.const修饰的变量在程序里面是不能改变的,但是可以被程序外的东西修改,就象上面说的外部端口的值,如果仅仅使用const,有可能complier会优化掉这些变量,加上volatile就万无一失了.

violate java 为什么不安全

AtomicInteger,一个提供原子操作的Integer的类. 在Java语言中,++i和i++操作并不是线程安全的.在使用的时候,不可避免的会用到synchronized关键字.而AtomicInteger则通过一种线程安全的加减操作接口. 而volatile修饰,只是保证每次取a的值...

懒汉,线程不安全为什么不能多线程

任务占坑

线程问题: 明明是2个独立线程 为什么还会相互影响

你好!2个线程访问了同一个变量.或在线程里面调用同一个函数.要具体问题具体对待.请说详细点儿可能是你线程的启动位置写的不对.应该在主线程刚进入的时间就启动独立线程.比如你是在打开文件以后才加的线程我的回答你还满意吗~~

java中如何在一个线程中阻塞其他线程

假设你有一个主线程,线程名为:Thread_A,然后通过Thread_A创建了线程Thread_B、Thread_C,并将线程Thread_B、Thread_C作为局部变量的方式存储在Thread_A中,并调用Thread_B、Thread_C的start()方法开始执行Thread_B、Thread_C,当Thread_A执行到你要停止的地方就分别调用Thread_B、Thread_C的Wait()方法,使Thread_B、Thread_C暂停,然后线程Thread_A继续执行,直到Thread_A中调用Thread_B、Thread_C的notify()方法使得Thread_B、Thread_C继续执行,大体上就是这样!

java 两个线程同时调用一个类里的同一个方法,这样会出现什么情况?有没有问题?

如果该方法不涉及写公共的资源比如一个静态的变量或者写文件,修改某个数据库的值的时候没有影响比如你这个类里的方法只是对输入的参数做一个计算然后返回计算的...

java问题:final关键字到底修饰了什么?

final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变. 引用本身的不变: ...

嵌入式c编程中的volatile关键字有何作用

为了避免编译器进行优化吧好像,比如为了实现无操作延时:asm("mov r0, r0");可能会被编译器优化掉,但是如果加上volatile关键字,就不会被优化,而是严格按照编写的代码放入汇编后的文件中:asm volatile("mov r0, r0");这样就可以实现不被优化