- 浏览: 137802 次
- 性别:
- 来自: 北京
文章分类
最新评论
在 Java 中线程的状态可以分为:新建(New),运行状态(Runnable)、阻塞状态(Blocked)、等待状态(Waiting)、结束状态(Terminated)。运行状态可以转为 阻塞状态或等待状态。
在接收完基本概念后,我们看看显示锁(Lock)和内部锁(synchronized)有什么不同。
java 的内存模型,在java 中每个线程都有自己的工作内存,如寄存器,高速缓存等,线程在写入的时候首先写入的是自己的工作内存中,然后在刷到主内存中,读取也是先从主内存加载到工作内存中,然后线程是从工作内存中获取。
volatile 只能保证每次读写数据的时候都是对主内存进行操作,但是并不能保证该资源的同步。
在接收完基本概念后,我们看看显示锁(Lock)和内部锁(synchronized)有什么不同。
- Lock 支持更细粒度的同步控制
- Lock是无阻塞锁,synchronized 是阻塞锁。当线程A持有锁S,如果线程B也期望获取锁S,如果是显示锁则线程B进入等待状态,如果是内部锁则线程B进入阻塞状态
- Lock可以实现公平锁,synchronized 只能是非公平锁 公平是指JVM优先选择等待时间最长的线程持有锁,非公平是指随机选择
- Lock 是代码级的,synchronized 是JVM级的
java 的内存模型,在java 中每个线程都有自己的工作内存,如寄存器,高速缓存等,线程在写入的时候首先写入的是自己的工作内存中,然后在刷到主内存中,读取也是先从主内存加载到工作内存中,然后线程是从工作内存中获取。
volatile 只能保证每次读写数据的时候都是对主内存进行操作,但是并不能保证该资源的同步。
发表评论
-
使用memcached进行并发控制(转)
2015-12-29 14:39 881版权声明:本文为博主 ... -
ClassLoader加载流程
2014-04-16 09:59 673[b]当运行一个程序的时候,JVM启动, 运行bootstar ... -
springmvc请求接收参数的几种方法(转载)
2014-04-14 13:37 1533通过@PathVariabl注解获取路径中传递参数 JAVA ... -
JDK里的设计模式
2014-03-10 09:52 615适配器模式: 用来把一个接口转化成另一个接口。 java ... -
include与jsp:include区别
2014-02-28 15:03 579在jsp中include有两种形式,分别是 <%@ i ... -
DBCP的配置参数
2014-02-25 15:51 740tomcatde DHCP的配置 <Resource d ... -
java 时间处理的工具类(转)
2014-01-27 15:13 651import java.text.ParseException ... -
log4j
2014-01-17 13:56 394public Logger m_log = null; ... -
关于java Date和时区的问题
2013-12-18 11:55 836java2平台为我们提供了丰富的日期时间API。如java.u ... -
hessian异常总结
2013-12-12 17:53 1266版本不兼容 com.caucho.hessian.io.Hes ... -
java异常
2013-09-06 12:01 584java.sql.SQLException: Incorrec ... -
汉字转码的java实现
2013-08-05 17:26 1021package common; import java.ut ... -
验证邮件的有效性
2013-07-30 14:25 1134public static boolean checkEma ... -
优化Servlet配置
2013-04-09 10:31 639[b] 以往每添加一个Servlet就要在web. ... -
纯hessian的部署(转)
2012-11-06 17:44 831Web 服务是通过在 Web 服务器上部署 Servlet 来 ... -
Ehcache的使用
2012-07-27 15:11 852一、 配置文件ehcache.xml <ehcache& ... -
struts2上传文件活动文件名、类型
2012-05-16 08:45 941public class FileUpload { ... -
struts2乱码
2012-05-14 17:36 0Struts2.1.6 StrutsPrepareAndExe ... -
解决struts2过滤器冲突问题
2012-04-27 13:40 0struts2使用FilterDispatcher进行url过 ... -
cron表达式
2012-03-14 15:02 869所在组的定时任务用的quartz,是我第一个用的,今天有同事用 ...
相关推荐
lock 和 synchronized 都是锁的意思,但是它们有不同的实现机制和应用场景。lock 提供了更加灵活和高效的锁机制,可以满足不同场景下的需求,而 synchronized 则是 Java 中的关键字,具有语言的内置性。
lock锁,lock锁和synchronized的对比 # Lock锁 JDK5.0后Java提供了一种更加强大的线程同步机制。一种显式定义同步锁对象来实现锁,提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问...
【Java面试题】lock与synchronized区别
### Lock接口与synchronized关键字详解 #### 一、概述 在Java并发编程中,Lock接口与synchronized关键字都是实现同步的重要工具。它们虽然都用于控制多线程对共享资源的访问,但在使用方式、功能特性及灵活性方面...
本文将深入探讨两种主要的锁机制:`synchronized`关键字和`Lock`接口,以及它们各自的特点、应用场景和使用方式。 一、Synchronized `synchronized`是Java中的一个内置关键字,用于提供线程安全。它的主要作用是...
了解synchronized和lock的区别 synchronized是Java语言...在Java中,synchronized和lock都是用于实现线程同步的机制,但它们有不同的实现机制和性能特点。在选择使用哪种机制时,需要考虑到具体的应用场景和性能要求。
synchronized 和 Lock 是 Java 编程中两种常用的同步机制,用于实现线程安全的访问。两者都可以实现同步访问,但是它们有着不同的设计理念和使用场景。 synchronized 的缺陷 synchronized 是 Java 语言内置的...
线程同步Synchronized,监视器monitor和锁lock的关系2---马克-to-win java视频
Java并发编程中,Lock接口和synchronized关键字是两种常见的互斥锁定机制,它们都用于确保多线程环境下的数据一致性。然而,它们在特性和使用上存在显著的区别。 首先,Lock是一个接口,它提供了比synchronized更细...
了解 JVM 锁机制中的 synchronized 和 Lock 实现原理 在 Java 中,锁机制是数据同步的关键,存在两种锁机制:synchronized 和 Lock。了解这两种锁机制的实现原理对于理解 Java 并发编程非常重要。 synchronized 锁...
Lock、Synchronized 和 ReentrantLock 的使用 Lock、Synchronized 和 ReentrantLock 是 Java 中三种常用的同步机制,每种机制都有其特点和使用场景。下面对这三种机制进行详细的分析和比较。 一、Synchronized ...
在 Java 中,synchronized 关键字可以作用于 instance 变量、object reference(对象引用)、static 函数和 class literals(类名称字面常量)身上。 Synchronized 关键字的作用是取得对象的锁,而不是把一段代码或...
在了解Lock和synchronized的区别之前,我们首先需要了解它们的基本概念。Lock是一个接口,它提供了一种机制来保护critical section,使得多个线程在访问共享资源时不会发生冲突。synchronized是Java语言提供的一种...
"Synchronized与Lock"这个主题探讨了两种主要的同步机制:synchronized关键字和Lock接口(包括其实现类如ReentrantLock)。这两种机制都用于实现线程间的互斥访问,但它们在功能、灵活性和性能上有所差异。 首先,...
总的来说,Synchronized和Lock都是Java中解决并发问题的重要工具,它们各有优势,适用于不同的场景。在实际开发中,根据应用的需求和性能考虑,选择合适的同步机制至关重要。理解它们的差异和使用方式,有助于编写出...
本文将深入探讨`synchronized`的几种使用示例,包括方法加锁、代码块加锁(针对`this`和对象)以及静态方法加锁。 1. **方法加锁** 当在实例方法前使用`synchronized`关键字时,它会锁定当前对象的监视器,只有...
除了锁住对象或类,`synchronized`还可以与`wait()`、`notify()`和`notifyAll()`方法结合使用,实现复杂的线程通信和同步。这些方法都是在`Object`类中定义的,只有在持有对象锁的情况下才能调用,否则会抛出`...
1. **使用方式**:`synchronized`是隐式同步,无需手动释放,而`Lock`是显式同步,需手动调用`lock()`和`unlock()`。 2. **控制能力**:`Lock`提供了更多控制选项,如可中断、可选择公平性、锁分离等。 3. **异常...
在深入探讨`synchronized`的关键知识点之前,我们先来明确`synchronized`在Java中的核心作用:它是一种用于实现线程同步的机制,确保了共享资源在多线程环境下的正确访问和修改,避免了数据不一致性和竞态条件等问题...