事实证明volatile对可见性并没有影响

不添加volatile测试可见性

未添加volatile测试代码:

public class Test {
	int i=10;
	public void add() {
		System.out.println("add========================"+(i=i+10));
	}
	public static void main(String[] args) throws InterruptedException {
		final Test obj=new Test();
		new Thread(()->{
			int j=0;
			while(j<100) {
				System.out.println("start>>>"+j+"========================"+obj.i);
				obj.add();
				System.out.println("end<<<<<"+j+"========================"+obj.i);
				j++;
			}
		},"A").start();

		int j=0;
		while(j<100) {
			System.out.println("main"+j+"--------"+obj.i);
			j++;
		}
	}
}

未添加volatile控制台输出的结果的分析
main7--------20#main线程获取到了最新数据20,此时A线程的数据及时的通知了main线程,可见性没有问题。
main60--------20#main线程没有获取最新数据40,此时A线程的数据没有及时通知main线程,可见性出现问题。
main61--------40#main线程获取到了最新数据40,由此得知,线程修改共享内存数据并不保证每次立刻刷入主内存,有时候会有延迟,有时候没有延迟,延迟多久,这都是不确定的。

未添加volatile控制台输出:

main0--------10
main1--------10
main2--------10
main3--------10
main4--------10
main5--------10
start>>>0========================10
main6--------10
#main线程获取到了最新数据20,此时A线程的数据及时的通知了main线程,可见性没有问题。
main7--------20
main8--------20
main9--------20
main10--------20
main11--------20
main12--------20
main13--------20
main14--------20
main15--------20
main16--------20
add========================20
main17--------20
main18--------20
main19--------20
main20--------20
main21--------20
main22--------20
main23--------20
end<<<<<0========================20
main24--------20
main25--------20
main26--------20
main27--------20
main28--------20
main29--------20
main30--------20
main31--------20
main32--------20
main33--------20
main34--------20
main35--------20
main36--------20
main37--------20
main38--------20
main39--------20
main40--------20
main41--------20
main42--------20
main43--------20
main44--------20
main45--------20
main46--------20
main47--------20
main48--------20
main49--------20
main50--------20
main51--------20
main52--------20
main53--------20
main54--------20
main55--------20
main56--------20
main57--------20
main58--------20
main59--------20
start>>>1========================20
add========================30
end<<<<<1========================30
start>>>2========================30
add========================40
#main线程没有获取最新数据40,此时A线程的数据没有及时通知main线程,可见性出现问题。
main60--------20
end<<<<<2========================40
#main线程获取到了最新数据40,由此得知,线程修改共享内存数据并不保证每次立刻刷入主内存,有时候会有延迟,有时候没有延迟,延迟多久,这都是不确定的。
main61--------40
start>>>3========================40
main62--------40
main63--------50
add========================50
main64--------50
main65--------50
end<<<<<3========================50
main66--------50
start>>>4========================50
add========================60
end<<<<<4========================60
start>>>5========================60
add========================70
end<<<<<5========================70
start>>>6========================70
add========================80
end<<<<<6========================80
start>>>7========================80
add========================90
end<<<<<7========================90
main67--------50
main68--------90
main69--------90
main70--------90
start>>>8========================90
add========================100
end<<<<<8========================100
start>>>9========================100
add========================110
end<<<<<9========================110
start>>>10========================110
add========================120
end<<<<<10========================120
start>>>11========================120
add========================130
main71--------90
main72--------130
main73--------130
main74--------130
main75--------130
main76--------130
main77--------130
main78--------130
main79--------130
main80--------130
main81--------130
main82--------130
main83--------130
main84--------130
main85--------130
main86--------130
main87--------130
main88--------130
main89--------130
main90--------130
main91--------130
main92--------130
main93--------130
main94--------130
main95--------130
main96--------130
main97--------130
main98--------130
main99--------130
end<<<<<11========================130
start>>>12========================130
add========================140
end<<<<<12========================140
start>>>13========================140
add========================150
end<<<<<13========================150
start>>>14========================150
add========================160
end<<<<<14========================160
start>>>15========================160
add========================170
end<<<<<15========================170
start>>>16========================170
add========================180
end<<<<<16========================180
start>>>17========================180
add========================190
end<<<<<17========================190
start>>>18========================190
add========================200
end<<<<<18========================200
start>>>19========================200
add========================210
end<<<<<19========================210
start>>>20========================210
add========================220
end<<<<<20========================220
start>>>21========================220
add========================230
end<<<<<21========================230
start>>>22========================230
add========================240
end<<<<<22========================240
start>>>23========================240
add========================250
end<<<<<23========================250
start>>>24========================250
add========================260
end<<<<<24========================260
start>>>25========================260
add========================270
end<<<<<25========================270
start>>>26========================270
add========================280
end<<<<<26========================280
start>>>27========================280
add========================290
end<<<<<27========================290
start>>>28========================290
add========================300
end<<<<<28========================300
start>>>29========================300
add========================310
end<<<<<29========================310
start>>>30========================310
add========================320
end<<<<<30========================320
start>>>31========================320
add========================330
end<<<<<31========================330
start>>>32========================330
add========================340
end<<<<<32========================340
start>>>33========================340
add========================350
end<<<<<33========================350
start>>>34========================350
add========================360
end<<<<<34========================360
start>>>35========================360
add========================370
end<<<<<35========================370
start>>>36========================370
add========================380
end<<<<<36========================380
start>>>37========================380
add========================390
end<<<<<37========================390
start>>>38========================390
add========================400
end<<<<<38========================400
start>>>39========================400
add========================410
end<<<<<39========================410
start>>>40========================410
add========================420
end<<<<<40========================420
start>>>41========================420
add========================430
end<<<<<41========================430
start>>>42========================430
add========================440
end<<<<<42========================440
start>>>43========================440
add========================450
end<<<<<43========================450
start>>>44========================450
add========================460
end<<<<<44========================460
start>>>45========================460
add========================470
end<<<<<45========================470
start>>>46========================470
add========================480
end<<<<<46========================480
start>>>47========================480
add========================490
end<<<<<47========================490
start>>>48========================490
add========================500
end<<<<<48========================500
start>>>49========================500
add========================510
end<<<<<49========================510
start>>>50========================510
add========================520
end<<<<<50========================520
start>>>51========================520
add========================530
end<<<<<51========================530
start>>>52========================530
add========================540
end<<<<<52========================540
start>>>53========================540
add========================550
end<<<<<53========================550
start>>>54========================550
add========================560
end<<<<<54========================560
start>>>55========================560
add========================570
end<<<<<55========================570
start>>>56========================570
add========================580
end<<<<<56========================580
start>>>57========================580
add========================590
end<<<<<57========================590
start>>>58========================590
add========================600
end<<<<<58========================600
start>>>59========================600
add========================610
end<<<<<59========================610
start>>>60========================610
add========================620
end<<<<<60========================620
start>>>61========================620
add========================630
end<<<<<61========================630
start>>>62========================630
add========================640
end<<<<<62========================640
start>>>63========================640
add========================650
end<<<<<63========================650
start>>>64========================650
add========================660
end<<<<<64========================660
start>>>65========================660
add========================670
end<<<<<65========================670
start>>>66========================670
add========================680
end<<<<<66========================680
start>>>67========================680
add========================690
end<<<<<67========================690
start>>>68========================690
add========================700
end<<<<<68========================700
start>>>69========================700
add========================710
end<<<<<69========================710
start>>>70========================710
add========================720
end<<<<<70========================720
start>>>71========================720
add========================730
end<<<<<71========================730
start>>>72========================730
add========================740
end<<<<<72========================740
start>>>73========================740
add========================750
end<<<<<73========================750
start>>>74========================750
add========================760
end<<<<<74========================760
start>>>75========================760
add========================770
end<<<<<75========================770
start>>>76========================770
add========================780
end<<<<<76========================780
start>>>77========================780
add========================790
end<<<<<77========================790
start>>>78========================790
add========================800
end<<<<<78========================800
start>>>79========================800
add========================810
end<<<<<79========================810
start>>>80========================810
add========================820
end<<<<<80========================820
start>>>81========================820
add========================830
end<<<<<81========================830
start>>>82========================830
add========================840
end<<<<<82========================840
start>>>83========================840
add========================850
end<<<<<83========================850
start>>>84========================850
add========================860
end<<<<<84========================860
start>>>85========================860
add========================870
end<<<<<85========================870
start>>>86========================870
add========================880
end<<<<<86========================880
start>>>87========================880
add========================890
end<<<<<87========================890
start>>>88========================890
add========================900
end<<<<<88========================900
start>>>89========================900
add========================910
end<<<<<89========================910
start>>>90========================910
add========================920
end<<<<<90========================920
start>>>91========================920
add========================930
end<<<<<91========================930
start>>>92========================930
add========================940
end<<<<<92========================940
start>>>93========================940
add========================950
end<<<<<93========================950
start>>>94========================950
add========================960
end<<<<<94========================960
start>>>95========================960
add========================970
end<<<<<95========================970
start>>>96========================970
add========================980
end<<<<<96========================980
start>>>97========================980
add========================990
end<<<<<97========================990
start>>>98========================990
add========================1000
end<<<<<98========================1000
start>>>99========================1000
add========================1010
end<<<<<99========================1010

添加volatile测试可见性

添加volatile后代码:

public class Test2 {
	volatile int i=10;
	public void add() {
		System.out.println("add========================"+(i=i+10));
	}
	public static void main(String[] args) throws InterruptedException {
		final Test2 obj=new Test2();
		new Thread(()->{
			int j=0;
			while(j<100) {
				System.out.println("start>>>"+j+"========================"+obj.i);
				obj.add();
				System.out.println("end<<<<<"+j+"========================"+obj.i);
				j++;
			}
		},"A").start();

		int j=0;
		while(j<100) {
			System.out.println("main"+j+"--------"+obj.i);
			j++;
		}
	}
}

添加volatile控制台输出的结果的分析
main7--------20#main线程获取到了最新数据20,此时A线程的数据及时的通知了main线程,可见性没有问题。
main17--------20#main线程没有获取最新数据50,此时A线程的数据没有及时通知main线程,可见性出现问题。
main18--------50#main线程获取到了最新数据50,由此得知,线程修改共享内存数据并不保证每次立刻刷入主内存,有时候会有延迟,有时候没有延迟,延迟多久,这都是不确定的。

从结果上看,volatile对可见性并没有影响。

添加volatile控制台输出:

main0--------10
main1--------10
main2--------10
main3--------10
main4--------10
main5--------10
start>>>0========================10
main6--------10
main7--------20
main8--------20
main9--------20
main10--------20
main11--------20
main12--------20
add========================20
main13--------20
main14--------20
main15--------20
main16--------20
end<<<<<0========================20
start>>>1========================20
add========================30
end<<<<<1========================30
start>>>2========================30
add========================40
end<<<<<2========================40
start>>>3========================40
add========================50
end<<<<<3========================50
main17--------20
main18--------50
main19--------50
main20--------50
main21--------50
main22--------50
main23--------50
main24--------50
main25--------50
main26--------50
start>>>4========================50
add========================60
end<<<<<4========================60
start>>>5========================60
add========================70
end<<<<<5========================70
start>>>6========================70
add========================80
end<<<<<6========================80
start>>>7========================80
add========================90
main27--------50
end<<<<<7========================90
start>>>8========================90
add========================100
end<<<<<8========================100
start>>>9========================100
add========================110
end<<<<<9========================110
start>>>10========================110
add========================120
end<<<<<10========================120
main28--------90
main29--------120
main30--------120
main31--------120
main32--------120
main33--------120
main34--------120
start>>>11========================120
add========================130
main35--------120
main36--------130
main37--------130
main38--------130
end<<<<<11========================130
start>>>12========================130
main39--------130
main40--------140
main41--------140
main42--------140
add========================140
main43--------140
main44--------140
main45--------140
main46--------140
main47--------140
main48--------140
main49--------140
end<<<<<12========================140
start>>>13========================140
add========================150
main50--------140
main51--------150
main52--------150
main53--------150
main54--------150
main55--------150
main56--------150
main57--------150
main58--------150
end<<<<<13========================150
start>>>14========================150
add========================160
end<<<<<14========================160
start>>>15========================160
add========================170
main59--------150
main60--------170
main61--------170
main62--------170
main63--------170
main64--------170
main65--------170
main66--------170
main67--------170
main68--------170
main69--------170
main70--------170
main71--------170
main72--------170
main73--------170
main74--------170
main75--------170
main76--------170
main77--------170
main78--------170
main79--------170
main80--------170
main81--------170
main82--------170
main83--------170
main84--------170
main85--------170
main86--------170
main87--------170
main88--------170
main89--------170
main90--------170
end<<<<<15========================170
main91--------170
main92--------170
main93--------170
main94--------170
main95--------170
main96--------170
main97--------170
main98--------170
main99--------170
start>>>16========================170
add========================180
end<<<<<16========================180
start>>>17========================180
add========================190
end<<<<<17========================190
start>>>18========================190
add========================200
end<<<<<18========================200
start>>>19========================200
add========================210
end<<<<<19========================210
start>>>20========================210
add========================220
end<<<<<20========================220
start>>>21========================220
add========================230
end<<<<<21========================230
start>>>22========================230
add========================240
end<<<<<22========================240
start>>>23========================240
add========================250
end<<<<<23========================250
start>>>24========================250
add========================260
end<<<<<24========================260
start>>>25========================260
add========================270
end<<<<<25========================270
start>>>26========================270
add========================280
end<<<<<26========================280
start>>>27========================280
add========================290
end<<<<<27========================290
start>>>28========================290
add========================300
end<<<<<28========================300
start>>>29========================300
add========================310
end<<<<<29========================310
start>>>30========================310
add========================320
end<<<<<30========================320
start>>>31========================320
add========================330
end<<<<<31========================330
start>>>32========================330
add========================340
end<<<<<32========================340
start>>>33========================340
add========================350
end<<<<<33========================350
start>>>34========================350
add========================360
end<<<<<34========================360
start>>>35========================360
add========================370
end<<<<<35========================370
start>>>36========================370
add========================380
end<<<<<36========================380
start>>>37========================380
add========================390
end<<<<<37========================390
start>>>38========================390
add========================400
end<<<<<38========================400
start>>>39========================400
add========================410
end<<<<<39========================410
start>>>40========================410
add========================420
end<<<<<40========================420
start>>>41========================420
add========================430
end<<<<<41========================430
start>>>42========================430
add========================440
end<<<<<42========================440
start>>>43========================440
add========================450
end<<<<<43========================450
start>>>44========================450
add========================460
end<<<<<44========================460
start>>>45========================460
add========================470
end<<<<<45========================470
start>>>46========================470
add========================480
end<<<<<46========================480
start>>>47========================480
add========================490
end<<<<<47========================490
start>>>48========================490
add========================500
end<<<<<48========================500
start>>>49========================500
add========================510
end<<<<<49========================510
start>>>50========================510
add========================520
end<<<<<50========================520
start>>>51========================520
add========================530
end<<<<<51========================530
start>>>52========================530
add========================540
end<<<<<52========================540
start>>>53========================540
add========================550
end<<<<<53========================550
start>>>54========================550
add========================560
end<<<<<54========================560
start>>>55========================560
add========================570
end<<<<<55========================570
start>>>56========================570
add========================580
end<<<<<56========================580
start>>>57========================580
add========================590
end<<<<<57========================590
start>>>58========================590
add========================600
end<<<<<58========================600
start>>>59========================600
add========================610
end<<<<<59========================610
start>>>60========================610
add========================620
end<<<<<60========================620
start>>>61========================620
add========================630
end<<<<<61========================630
start>>>62========================630
add========================640
end<<<<<62========================640
start>>>63========================640
add========================650
end<<<<<63========================650
start>>>64========================650
add========================660
end<<<<<64========================660
start>>>65========================660
add========================670
end<<<<<65========================670
start>>>66========================670
add========================680
end<<<<<66========================680
start>>>67========================680
add========================690
end<<<<<67========================690
start>>>68========================690
add========================700
end<<<<<68========================700
start>>>69========================700
add========================710
end<<<<<69========================710
start>>>70========================710
add========================720
end<<<<<70========================720
start>>>71========================720
add========================730
end<<<<<71========================730
start>>>72========================730
add========================740
end<<<<<72========================740
start>>>73========================740
add========================750
end<<<<<73========================750
start>>>74========================750
add========================760
end<<<<<74========================760
start>>>75========================760
add========================770
end<<<<<75========================770
start>>>76========================770
add========================780
end<<<<<76========================780
start>>>77========================780
add========================790
end<<<<<77========================790
start>>>78========================790
add========================800
end<<<<<78========================800
start>>>79========================800
add========================810
end<<<<<79========================810
start>>>80========================810
add========================820
end<<<<<80========================820
start>>>81========================820
add========================830
end<<<<<81========================830
start>>>82========================830
add========================840
end<<<<<82========================840
start>>>83========================840
add========================850
end<<<<<83========================850
start>>>84========================850
add========================860
end<<<<<84========================860
start>>>85========================860
add========================870
end<<<<<85========================870
start>>>86========================870
add========================880
end<<<<<86========================880
start>>>87========================880
add========================890
end<<<<<87========================890
start>>>88========================890
add========================900
end<<<<<88========================900
start>>>89========================900
add========================910
end<<<<<89========================910
start>>>90========================910
add========================920
end<<<<<90========================920
start>>>91========================920
add========================930
end<<<<<91========================930
start>>>92========================930
add========================940
end<<<<<92========================940
start>>>93========================940
add========================950
end<<<<<93========================950
start>>>94========================950
add========================960
end<<<<<94========================960
start>>>95========================960
add========================970
end<<<<<95========================970
start>>>96========================970
add========================980
end<<<<<96========================980
start>>>97========================980
add========================990
end<<<<<97========================990
start>>>98========================990
add========================1000
end<<<<<98========================1000
start>>>99========================1000
add========================1010
end<<<<<99========================1010

由此可见,volatile对可见性没有任何影响,希望有大神来解释一下volatile与可见性的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值