验证多线程的经典代码,以及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关键字的一个小例子

在公司分配给我的爬虫任务中,具体的信息又写需要在详情页中取得,所以需要在加入待抓取链接 我们用的框架是基于java 的webmagic ,这个框架可以在启动时设定多个线程抓取,所以待抓取的多...

多线程三 经典线程同步之关键段CS

1、本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。 定义关键段变量:CRITICAL_SECTION g_csThreadParameter, g_csThreadCod...

C++中 volatile关键字,实现多线程编程必备

讲讲C++中的volatile关键字 引子1     猜猜看,下面这段代码有什么问题: 1 2 3 4 voi...

c#多线程中Lock()关键字的使用

本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。 每个线程...

Java多线程查找指定文件夹下包含指定关键字的文件数量(未使用线程池版)

import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.u...

以关键代码段为例子详细讲解多线程中的同步技术

说线程就要说到进程每一个exe文件运行的时候 系统就会为这个进程分配虚拟空间  ,多个进程在逻辑上重复使用该空间  。     线程实际上是程序真正的功能实现者,一个进程包含多个线程 ,线程之间相互...

VC++多线程,互斥对象,事件对象,关键代码段实现线程同步

// mlti thread.cpp : 定义控制台应用程序的入口点。 // /*#include "stdafx.h" #include using namespace std; ...

volatile在多线程中的使用

volatilevolatile修饰的变量,线程每次使用变量时,都会读取变量修改后的最新值,但volatile并不表示原子性操作,它只能保证该变量被修改后马上更新到主存(即保证下一个要读取的线程可以读...

6. 初学Java多线程:慎重使用volatile关键字

学习Java多线程中会遇到使用volatile关键字的情况。volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型。使用它有一定的限制。volatile关键字相信了...

Java多线程:慎重使用volatile关键字

volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型。如果这些简单数据类型声明为volatil...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:验证多线程的经典代码,以及volatile关键字的使用
举报原因:
原因补充:

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