当前位置:网站首页 > Java基础 > 正文

java面试的基础问题



 

以下想通过实践证明几点:
1.两种声明方式是否线程安全。
2.总结两种方式的区别。

第一两种声明方式是否线程安全。

证明1:private static int value = 1; 非线程安全

 

将已上代码片段稍作调整再次验证。
注释3处,实例化对象挪到线程run方法体内

 

结论:已上两种情况相同针对 private static int value = 1; 都是非线程安全的。

那么都知道通过synchronized关键字可以将get1方法改为线程安全的。分别在两段代码片段中的get1方法加上synchronized关键字,但是结果却又不同了

  • 第一段代码 实例化一个对象,并通过1000个线程调用 get1 方法,synchronized关键字起作用的。
  • 第二段代码 通过1000个线程实例化1000个对象,并调用 get1 方法,synchronized关键字不起作用。

补充:synchronized关键字在多线程情况下针对同一个实例(对象Object)是起作用的。

证明2:private int value = 1; 非线程安全

 

同样将已上代码片段稍作调整再次验证。
注释3处,实例化对象挪到线程run方法体内

 

实际结果:输出的全部是 1

结论:针对 private int value = 1;

  • 第一段代码 实例化一个对象,并通过1000个线程调用 get1 方法,value值非线程安全。
  • 第二段代码 通过1000个线程实例化1000个对象,并调用 get1 方法,value值线程安全。
  • java面试的基础问题

补充:在多线程情况下针对同一个实例(对象Object)内的基础类型声明的属性 进行调用是非线程安全的。

总结两种方式的区别。
  1. 静态属性相对于类(class)是非线程安全的。如上结论无论实例化一个对象,并通过多线程调用方法。还是通过多线程实例化多个对象,调用方法结果是一样的。
  2. 一般属性相对于对象(object)是非线程安全的。如上结论,实例化一个对象,并通过多个线程调用方法获取属性值,值是不可靠的。而实通过线程实例化多个对象,并调用方法获取属性值,值是可靠的。

版权声明


相关文章:

  • java零基础在线图书2024-10-20 12:10:06
  • java基础包有哪些2024-10-20 12:10:06
  • java基础之方法重载2024-10-20 12:10:06
  • javaee先学html还是java基础2024-10-20 12:10:06
  • java小白基础题2024-10-20 12:10:06
  • java实验二面向对象基础2024-10-20 12:10:06
  • 如何使用java实现最基础的UI2024-10-20 12:10:06
  • java基础3162024-10-20 12:10:06
  • java基础数据类型相等比较2024-10-20 12:10:06
  • 上海微电子java基础面试2024-10-20 12:10:06