Java刷题知识点之同步方法和同步代码块的区别(用synchronized关键字修饰)

简介:

为何要使用同步? 

    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){代码内容}进行修饰;


本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/7417339.html,如需转载请自行联系原作者
相关文章
|
7天前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
30天前
|
Java 云计算
Java多线程编程中的同步与互斥机制探析
在当今软件开发领域,多线程编程是一项至关重要的技能。本文将深入探讨Java中的同步与互斥机制,分析其在多线程环境下的应用及实现原理,帮助读者更好地理解并运用这一关键技术。
22 4
|
13天前
|
设计模式 安全 Java
Java并发编程实战:使用synchronized关键字实现线程安全
【4月更文挑战第6天】Java中的`synchronized`关键字用于处理多线程并发,确保共享资源的线程安全。它可以修饰方法或代码块,实现互斥访问。当用于方法时,锁定对象实例或类对象;用于代码块时,锁定指定对象。过度使用可能导致性能问题,应注意避免锁持有时间过长、死锁,并考虑使用`java.util.concurrent`包中的高级工具。正确理解和使用`synchronized`是编写线程安全程序的关键。
|
2天前
|
存储 缓存 安全
Java并发基础之互斥同步、非阻塞同步、指令重排与volatile
在Java中,多线程编程常常涉及到共享数据的访问,这时候就需要考虑线程安全问题。Java提供了多种机制来实现线程安全,其中包括互斥同步(Mutex Synchronization)、非阻塞同步(Non-blocking Synchronization)、以及volatile关键字等。 互斥同步(Mutex Synchronization) 互斥同步是一种基本的同步手段,它要求在任何时刻,只有一个线程可以执行某个方法或某个代码块,其他线程必须等待。Java中的synchronized关键字就是实现互斥同步的常用手段。当一个线程进入一个synchronized方法或代码块时,它需要先获得锁,如果
21 0
|
4天前
|
Java
Java关键字(1)
Java关键字(1)
|
13天前
|
Java
java线程知识点总结
Java线程核心概念:线程是程序执行流,一个进程可有多个线程。创建线程通过继承Thread或实现Runnable接口。线程状态包括新建、就绪、运行、阻塞、等待、超时等待和终止。同步用synchronized或Lock防止数据不一致,避免死锁。线程间通过共享变量、wait/notify通信。线程池(如ThreadPoolExecutor、ScheduledThreadPoolExecutor)优化性能和资源管理。
16 6
|
16天前
|
设计模式 安全 Java
Java基础知识点总结1
Java基础知识点总结
23 0
|
29天前
|
缓存 NoSQL Java
java中复杂业务情况下的集合操作(增减集合同步数据)
java中复杂业务情况下的集合操作(增减集合同步数据)
26 0
|
29天前
|
Java 索引
java知识点总结(二)
java知识点总结(二)
13 0
|
29天前
|
存储 Java 数据库
java基础的知识点(一)
java基础的知识点(一)
12 0