Volatile关键字

mark

主要内容

  • 什么是volatile?
    • volatile关键词是作为变量的修饰符存在的,它的存在目的是给线程同步提供了除了锁以外的另一种方式。
  • 为什么要使用volatile?
    • 在某些场景下使用volatile关键词去做线程同步在效率是确实要优于锁,并且在某些场景下我们为了避免程序重新排序导致线程读取值的不一致问题,此时也可以考虑使用volatile。
  • volatile实际应用场景
    • 需求1:某线程在运行过程中,需要改变运行状态中的标识位,是否可以通过线程对象将标识位改变?
    • 需求2:启动4个线程对于线程中变量count累加1000次,如何保证启动之后累加结果4000?

Demand01.java

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
33
34
35
36
37
38
39
40
import java.util.concurrent.TimeUnit;

/**
* 什么是volatile?
* volatile关键字是作为变量的修饰符存在的,它的存在目的是给线程同步提供了除了锁以外的另一种方式。
*
* 为什么要使用volatile?
* 在某些情景下使用volatile关键词去做线程同步在效率是确实要优于锁,并且在某
* 情景下我们为了避免程序重新排序导致线程读取值得不一致问题,此时也可以使用volatile。
*
* volatile的实际应用场景
*
*
* @description 测试用例1:在线程中存在标识符,如何通过线程对象改变标识位
* @author GaoHangHang
* @date 2018/07/13 14:10
**/
public class Demand01 {
public static void main(String[] args) {
ChangeFlag ch = new ChangeFlag();
ch.start();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
ch.flag = false;
}
}
class ChangeFlag extends Thread {
boolean flag = true;
@Override
public void run() {
System.out.println("准备改变标识。。。");
while (flag){
System.out.println("dddddddd");
}
System.out.println("已经改变标识。。。");
}
}

mark

mark

mark

mark

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
package 基础知识.Java基础.volatileTest;

import java.util.concurrent.TimeUnit;

/**
* @description 测试用例1:多线程增加某个变量值
* @author GaoHangHang
* @date 2018/07/13 17:51
**/
public class Demand02 {
public static void main(String[] args) {
AddCount ac = new AddCount();
for (int i = 0; i < 4; i++) {
new Thread(ac).start();
}
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("4个线程执行累加1000次最后count的结果是:"+ ac.count);
}
}
class AddCount implements Runnable{
volatile int count = 0;
@Override
public synchronized void run() {
for (int i = 0; i < 1000; i++) {
count++;
}
}
}

mark

mark

mark

mark

mark

mark

mark

mark

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信