首页 > 其他分享 >Synchronized用法

Synchronized用法

时间:2022-08-21 17:24:53浏览次数:74  
标签:Synchronized synchronized 对象 代码 用法 线程 修饰 方法

synchronized是Java中的关键字,是一种同步锁。

@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改,保证代码的安全性。

也就是包装这段代码是原子性的,安全的。(是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行)它修饰的对象有以下几种: 

  1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 
  2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 

       3.修饰一个静态方法。

     4.修饰类

修饰方法的注意事项 接口方法时不能使用synchronized关键字;
构造方法不能使用synchronized关键字,但可以使用synchronized代码块进行同步;
synchronized关键字无法继承;
如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的。
子类方法同步的解决方案
  1.子类方法也加上synchronized 关键字
  2.子类方法中调用父类同步的方法,例如:使用 super.xxxMethod()调用父类方法   3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 
  4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

修饰一个代码块

  一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞。(只有当当前线程访问完该代码块之后另一个才可以访问)

 

当两个并发线程(thread1和thread2)访问同一个对象(syncThread)中的synchronized代码时,在同一时刻只能有一个线程得到执行,另一个线程受阻塞,必须等待当前线程执行完这个代码块以后才能执行该代码块。

 

标签:Synchronized,synchronized,对象,代码,用法,线程,修饰,方法
From: https://www.cnblogs.com/susuya/p/16610344.html

相关文章

  • Java中try()用法
    JDK1.7优化后的try-with-resource语句,写在()里面的流对象对应的类都实现了自动关闭接口AutoCloseabletry (创建流对象语句,如果多个,使用';'隔开){    //读写数据......
  • @EnableConfigurationProperties和@ConfigurationProperties用法及注意事项
    在开发过程中,我们经常看到以下2个注解:@ConfigurationProperties@EnableConfigurationProperties一、先分别介绍一下这两个注解的用法:1、@ConfigurationPropertie......
  • Git基本用法
    管理修改文件Resetgitreset//只会影响tracked的文件Unpackedfilegitclean-f-fd-xfd//删除文件、文件&夹、包含.gitignore指定的gitclean-nf-nfd-nxfd......
  • flex容器的属性flex-wrap用法
    内容大于盒子宽度<styletype="text/css">.bigbox{width:500px;height:400px;background:#ff0000;display:flex;flex-direction:row;flex......
  • 定时任务-crontab简单用法
    定时任务-crontab简单用法crotab定时任务:在服务器上设置定时器,来执行特定的任务脚本,比如phpXXX或者pythonXXX,或者gorun***crontab基本用法:-crontab时间设置:......
  • Linux case语句用法
    case命令case语句与if-then-else语句的区别。例1:if-then-else语句,比较繁琐[19:37:32root@libin3libin]#usermod-Grootstudent[19:22:33root@libin3libin]#......
  • @RequiredArgsConstructor用法
    在我们写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@Autowired注解,代码看起来很乱.lombok提供了一个注解:@Required......
  • nmcli命令用法
    Linux下用nmcli命令做网卡绑定,你还不会用?原创 Cloud研习社 Cloud研习社 2022-06-1210:33 发表于山东收录于合集#实战经验33个#Linux122个#IT23个#计算机37......
  • xargs命令用法
    linux之xargs使用技巧原创 入门小站 入门小站 2022-06-1123:08 发表于北京收录于合集#Linux485个image-20210603130606567Unix命令都带有参数,有些命令可以接......
  • C#中的static静态变量的用法
    静态局部变量定义:在局部变量前加上static关键字时,就定义了静态局部变量。特点:A、该变量在全局数据区分配内存。B、初始化:如果不显式初始化,那么将被隐式初始化为0......