初识synchronized

什么是synchronized?

synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、D等)正在用这个方法,若有则要等正在使用synchronized方法的线程B(或者C、D)运行完这个方法后再运行此线程A,若没有则直接运行。

 

synchronized关键字理解

javasynchronized用法

使用了synchronized关键字可以轻松地解决多线程共享数据同步问题。

synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、object         reference(对象引用)、static函数和class literals(类名称字面常量)身上。 

synchronized取得的锁都是对象;每个对象只有一个锁(lock)与之相关联;实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

 

synchronized的4种用法

1.方法声明时使用,线程获得的是成员锁.

2.对某一代码块使用,synchronized后跟括号,括号里是变量,线程获得的是成员锁.

3.synchronized后面括号里是一对象,此时,线程获得的是对象锁.

4.synchronized后面括号里是类,此时,线程获得的是对象锁

 

修饰方法

public synchronized void method(){   

// todo

}

 

public void method(){

synchronized(this) {

     // todo  

   }

}

 

修饰代码块

 

 

 

 

 test01的运行结果

 

 test02的运行结果

 

修饰一个静态的方法

Synchronized也可修饰一个静态方法,用法如下:

 public synchronized static void method() {

// todo

}

静态方法是属于类的而不属于对象的。同样的,synchronized修饰的静态方法锁定的是这个类的所有对象。

 

修饰一个类

Synchronized还可作用于一个类,用法如下

 

 

 

 

 

posted @ 2020-02-02 22:57  星辰Tian  阅读(130)  评论(0编辑  收藏  举报