(2)熟悉Java中关键字 transient、instanceof、volatile、synchronized、final、static、原理及用法。

熟悉Java中关键字 transient、instanceof、volatile、synchronized、final、static、const 原理及用法。

目录

熟悉Java中关键字 transient、instanceof、volatile、synchronized、final、static、const 原理及用法。

 

transient

instanceof

volatile

 synchronized

final

 static


transient

变量修饰符,用transient关键字标记的成员变量不参与序列化过程。

举个例子:

从下面这个例子可以看出:nodeType 这个属性我用的是transient 关键字修饰的,对对象序列化以后,nodeType 的值为NUll

instanceof

用来判断引用类型的变量所指向的对象是否是一个类(或者接口,抽象类,父类)的实例

常用的方法是:result=object instanceof classname.

如果Object是class的一个实例,那么instanceof运算符返回为true,不是(或者Object为null),那么结果返回false

举个例子:

volatile

volatile 关键字在线程同步时使用。

举个例子:

在单线程的情况下,我们定义一个变量,对变量进行一系列操作,没啥大问题。

但是在多线程情况下, 我们定义一个变量的话,当A 线程 将这个变量修改成100, B线程线程修改成了200,如果这是money的话岂不是凉凉, 而用volatile 修饰这个变量的话,线程B 那边显示的也是100 ,在线程的情况下是可见的。

volatile 原理:

当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。 

引自:https://www.cnblogs.com/zhengbin/p/5654805.html

 synchronized

关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。

synchronized实现的三种方式:

  1. Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:
  2. 普通同步方法(实例方法),锁是当前实例对象 ,进入同步代码前要获得当前实例的锁
  3. 静态同步方法,锁是当前类的class对象 ,进入同步代码前要获得当前类对象的锁
  4. 同步方法块,锁是括号里面的对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。

举个例子:

多线程解析文件,我开启了三个线程执行10个文件。 解析文件的代码如果我照常写会出现什么问题呢? 你会发现解析文件不一致。存在同一个文件被多次执行。 这样就比较尴尬了。 所以一般情况下我们可以用synchronized关键字。

final

可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了

可以参考:https://blog.csdn.net/qq_34375473/article/details/81487803

 static

格式:

修饰变量:static 数据类型 变量名

修饰方法:【访问权限修饰符】 static 方法返回值 方法名(参数列表)

应用场景:

如果某个成员变量是被所有对象所共享的,那么这个成员变量就应该定义为静态变量。

 static如何去访问:

由于被static修饰的变量和方法是不属于任何实例对象的,所以在这里,强烈建议不要通过对象的方式去访问静态的变量或者方法。

静态变量:

类名.静态变量

对象.静态变量(不推荐的)

静态方法:

类名.静态方法

对象.静态方法(不推荐)

static使用注意事项:

在静态方法中没有this关键字因为静态是随着类的加载而加载,而this是随着对象的创建而存在的。

静态比对象优先存在。

静态可以访问静态的,但是静态不能访问非静态的。非静态的可以去访问静态的。

发布了54 篇原创文章 · 获赞 49 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tangthh123/article/details/104477150