码迷,mamicode.com
首页 > 其他好文 > 详细

初识synchronized

时间:2020-02-02 23:55:00      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:func   oid   comm   ram   param   cti   his   对象   strong   

什么是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还可作用于一个类,用法如下

技术图片

 

 技术图片

 

 

 

初识synchronized

标签:func   oid   comm   ram   param   cti   his   对象   strong   

原文地址:https://www.cnblogs.com/ptxxc/p/12254040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!