验证多线程的经典代码,以及volatile关键字的使用

原创 2016年05月31日 16:03:46
public class VariableShareTest {
	public static volatile int count =0;                                     //结果证明加上volatile关键字并不能保证变量在线程之间绝对的一致性。

	
	public static int doTest(){
		Thread[] threads = new Thread[20];
		for(int i=0;i<20;i++){
			threads[i] = new Thread(new Runnable(){
				@Override
				public void run(){                               //给每个线程委派一个耗时较长的工作加大线程间竞争的可能性
					for(int i=0;i<10000;i++){
						count++;
					}
				}
			});
			threads[i].start();
		}

		return count;
	}
	
	public static void main(String args[]){
		System.out.println(String.valueOf(doTest()));
	while(Thread.activeCount()>1)                                    //如果不加这一段代码,函数可能提前返回,得到的结果将会小很多。
			Thread.yield();
System.out.println(String.valueOf(VariableShareTest.count));//两个结果的不一致证明在方法中创建的对象并不会随着方法的结束而死亡。<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">还是需要通过加锁了解决线程间的共享问题</span>

                

多线程---volatile关键字

在多线程中,volatile关键字是很重要的一个知识点,在多线程共享资源的时候,每个线程数据对外都是不可见的,这就容易出现”脏读”现象,其实就是线程私有堆栈中的数据和公共堆栈中的数据不同步造成的.解决...
  • baidu_17508977
  • baidu_17508977
  • 2016年12月22日 15:50
  • 916

多线程之volatile关键字

之前讲解了多线程的synchronized关键字,现在再学习一下volatile关键字。1 volatile关键字用来做什么?线程安全包括两个方面:原子性和可见性。Java的同步机制都是围绕这两个方面...
  • Trigl
  • Trigl
  • 2016年04月15日 20:43
  • 1216

正确使用Volatile关键字

Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较...
  • wl6965307
  • wl6965307
  • 2016年04月18日 15:38
  • 4342

Android线程—Volatile关键字(一)

一、基本概念 先补充一下概念:Java 内存模型中的可见性、原子性和有序性。 可见性:   可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,...
  • weixin_37730482
  • weixin_37730482
  • 2017年06月09日 14:09
  • 179

关键字volatile的含义及使用

volatile的本意是“易变的” C语言书籍这样定义volatile关键字:volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接...
  • passerbyyuan
  • passerbyyuan
  • 2016年07月11日 21:39
  • 1272

Java线程安全之volatile关键字

我们知道在多线程的场景下,线程安全是必须要着重考虑的。Java语言包含两种内在的同步机制:同步块(synchronize关键字)和 volatile 变量。但是其中 Volatile 变量虽然使用简单...
  • Roy_70
  • Roy_70
  • 2017年04月07日 10:37
  • 2649

java volatile关键字(及使用场景)

当一个变量被定义为volatile之后,就可以保证此变量对所有线程的可见性,即当一个线程修改了此变量的值的时候,变量新的值对于其他线程来说是可以立即得知的。可以理解成:对volatile变量所有的写操...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2016年02月24日 10:55
  • 2062

volatile关键字的介绍和使用

Java关键字volatile的介绍
  • a284266978
  • a284266978
  • 2016年03月12日 18:11
  • 2017

关键字volatile的作用和三个不同的应用场合

学习C关键词的时候,我们看到了一个新面孔——volatile。在程序员面试宝典中提到“关键字volatile的面试例题是考查嵌入式编程”,中间有一段解析: 回答不出这个问题的人是不会被雇佣的。我...
  • KayChanGEEK
  • KayChanGEEK
  • 2016年01月25日 12:29
  • 4715

【多线程系列】Volatile总结之同步问题

Volatile总结之同步问题 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多...
  • gooooooal
  • gooooooal
  • 2015年11月24日 16:05
  • 1763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:验证多线程的经典代码,以及volatile关键字的使用
举报原因:
原因补充:

(最多只允许输入30个字)