不多说,直接上干货!

扩展博客

牛客网Java刷题知识点之多线程同步的实现方法有哪些

为何要使用同步?

java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。 什么是同步方法 ,什么是同步代码块?   用synchronized关键字修饰的方法。用synchronized关键字修饰的语句块。   在java代码中,每一个对象都拥有一把锁,使用synchronzied关键字可以获取到对象上的锁。该关键字可以用到方法上或者代码块上。

  同步方法:(粗粒度锁):

1.修饰一般方法: public synchronized void method (){...},获取的是当前调用 对象this上的锁

2.修饰静态方法: public static synchronized void method (){...},获取当前类的 字节码对象上的锁

 

  即在方法的声明之前加入synchronized 关键字

public  synchronized  void  mutiThreadAccess();

  

 

  同步代码块(细粒度锁):

synchronized ( obj ) {...},同步代码块可以指定获取哪个对象上的锁。

synchronized(syncObject) {
//访问syncObject的代码
}

  同步代码块使用的锁是任意对象Object。   同步方法使用的锁是this。   使用静态修饰的同步函数使用的是该类所在的字节码文件对象,格式为类名.class。     同步方法默认用this或者当前类class对象作为锁;  同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;     同步方法默认用this或者当前类class对象作为锁;  同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;  同步方法使用关键字synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用synchronized(object){代码内容}进行修饰;

更多相关文章

  1. 在java自动生成hashCode代码问题? 请大神赐教
  2. android开发 app闪退后fragment重叠bug解决方法,推荐使用第二种方
  3. 手动配置springMVC4的方法
  4. 什么案例需要Java中的同步方法访问?
  5. 请问java中调用一个静态方法()内传入一个对象是表示什么意思?
  6. 如何修改代码,使其仅打印单元格E和F?
  7. 在命令行下编译单个带包名的java类的方法
  8. Java记录 -88- 利用反射机制调用对象的私有方法和属性
  9. 使用字符串参数调用AndroidJni静态方法。

随机推荐

  1. Python 的四种共享传参详解
  2. 数据分析框架和任务拆解?看看大神怎么做!
  3. Cocos平台 | 快速集成AGC云函数服务
  4. 关于数据科学的趋势和前景,这里有你想了解
  5. 推荐:这才是你寻寻觅觅想要的 Python 可视
  6. 谁为你的健康数据负责?
  7. 推荐一个牛逼的生物信息 Python 库 - Das
  8. 用 Python 分析了 20 万场吃鸡数据
  9. 阅读优秀 Python 开源项目的代码,提升编程
  10. PMP项目管理:PMIID与PDU数量速查