学习Java的同学注意了!!!
学习进程中遇到甚么问题或想获得学习资源的话,欢迎加入Java学习交换群,群号码:183993990 我们1起学Java!
在java线程并发处理中,有1个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就能够万事大吉。
Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。
synchronized
同步块大家都比较熟习,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同1时刻只能有1个线程能够用
synchronized 修饰的方法 或 代码块。
volatile
用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。volatile很容易被误用,用来进行原子性操作。
下面看1个例子,我们实现1个计数器,每次线程启动的时候,会调用计数器inc方法,对计数器进行加1
履行环境——jdk版本:jdk1.6.0_31 ,内存 :3G cpu:x86 2.4G
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class Counter
{
public static int count
=0;
public static void inc()
{
//这里延迟1毫秒,使得结果明显
try {
Thread.sleep(1);
}catch (InterruptedException
e) {
}
count++;
}
public static void main(String[]
args) {
//同时启动1000个线程,去进行i++计算,看看实际结果
for (int i
=0;
i <
|