你真的掌握了并发编程volatile synchronized么?

先看代码: import java.util.concurrent.atomic.AtomicInteger; /** * * @author xialuomantian */ public class NewTest { static volatile int a = 1; static volatile int b = 1; //static int a = 1; //static int

先看代码:

import java.util.concurrent.atomic.AtomicInteger;

/**

*

* @author xialuomantian

*/

public class NewTest {

static volatile int a = 1;

static volatile int b = 1;

//static int a = 1;

//static int b = 1;

public static AtomicInteger aa = new AtomicInteger(0);

public static AtomicInteger bb = new AtomicInteger(0);

public static AtomicInteger ab = new AtomicInteger(0);

static void add() {

a++;

b++;

}

static synchronized void print() {

if (a > b) {

aa.getAndIncrement();

} else if (a < b) {

bb.getAndIncrement();

} if (a == b) {

ab.getAndIncrement();

}

}

public static void main(String[] args) {

System.out.println(Thread.currentThread().getName());

for (int i = 0; i < 100000; i++) {

new Thread(() -> {

add();

print();

}).start();

}

System.out.println("a>b:" + aa);

System.out.println("b>a:" + bb);

System.out.println("a==b:" + ab);

}

}

再去掉volatile

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package com.mycompany.mytest;

import java.util.concurrent.atomic.AtomicInteger;

/**

*

* @author xialuomantian

*/

public class NewTest {

static int a = 1;

static int b = 1;

public static AtomicInteger aa = new AtomicInteger(0);

public static AtomicInteger bb = new AtomicInteger(0);

public static AtomicInteger ab = new AtomicInteger(0);

static void add() {

a++;

b++;

}

static synchronized void print() {

if (a > b) {

aa.getAndIncrement();

} else if (a < b) {

bb.getAndIncrement();

} if (a == b) {

ab.getAndIncrement();

}

}

public static void main(String[] args) {

System.out.println(Thread.currentThread().getName());

for (int i = 0; i < 100000; i++) {

new Thread(() -> {

add();

print();

}).start();

}

System.out.println("a>b:" + aa);

System.out.println("b>a:" + bb);

System.out.println("a==b:" + ab);

}

}

下面是几种结果:

知秋君
上一篇 2024-07-03 15:31
下一篇 2024-07-03 15:31

相关推荐