一.剪切锁死(shear locking) 简单地说就是在理论上没有剪切变形的单元中发生了剪切变形。该剪切变形也常称伴生剪切( parasitic shear)。...解决方法: 1.采用减缩积分; 2.细化网格; 3.非协调单元; 4.假定剪切应变法; 二.体积锁死(volumetric locking) 简单地说就是应该有单元的体积变化的时候体积却没发生变化...二阶单元:对于弹塑性材料(塑性部分几乎属于不可压缩),二阶全积分四边形和六面体单元在塑性应变和弹性应变在一个数量级时会发生体积锁死。二次减缩积分单元发生大应变时体积锁死也伴随出现。...但值得注意的是,一阶全积分单元当采用选择性减缩积分(selectively reduced integration)时可以避免出现体积锁死。 产生的结果:使得体积不变,即体积模量太大,刚度太刚。...检查方法: 输出积分点的围压应力,分析围压应力是否在相邻积分点存在突变,是否显棋格式分布,是的话就说明出现体积锁死。
java线程锁死是什么 1、说明 线程锁死是指等待线程由于唤醒其所需的条件永远无法成立,或者其他线程无法唤醒这个线程而一直处于非运行状态(线程并未终止)导致其任务 一直无法进展。...2、线程锁死分为两种: (1)信号丢失锁死:信号丢失锁死是因为没有对应的通知线程来将等待线程唤醒,导致等待线程一直处于等待状态。...(2)嵌套监视器锁死:嵌套监视器锁死是由于嵌套锁导致等待线程永远无法被唤醒的一种故障。...比如一个线程,只释放了内层锁Y.wait(),但是没有释放外层锁X; 但是通知线程必须先获得外层锁X,才可以通过 Y.notifyAll()来唤醒等待线程,这就导致出现了嵌套等待现象。...以上就是java线程锁死的介绍,希望对大家有所帮助。更多Java学习指路:Java基础
java的”锁“事(1) 一、乐观锁和悲观锁 1.1 悲观锁 认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。...如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作 乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CAS算法,Java原子类中的递增操作就通过CAS自旋实现的。...乐观锁则直接去操作同步资源,是一种无锁算法,得之我幸不得我命,再抢 乐观锁一般有两种实现方式: 采用版本号机制 CAS(Compare-and-Swap,即比较并替换)算法实现 二、经典8锁 1...,该实例对象的其他普通同步方法必须等待获取锁的方法释放锁后才能获取锁。...在HotSpot虚拟机中,monitor采用ObjectMonitor实现 瞅一眼C++源码 ObjectMonitor.java→ObjectMonitor.cpp→objectMonitor.hpp
java的”锁“事(2) 一、公平锁和非公平锁 1.1 从ReentrantLock卖票编码演示公平和非公平现象 class Ticket { private int number = 30;...所以Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。...当执行monitorenter时,如果目标锁对象的计数器为零,那么说明它没有被其他线程所持有,Java虚拟机会将该锁对象的持有线程设置为当前线程,并且将 其计数器加1。...在目标锁对象的计数器不为零的情况下,如果锁对象的持有线程是当前线程,那么 Java 虚拟机可以将其计数器加1,否则需要等待,直至持有线程释放该锁。...当执行monitorexit时,Java虚拟机则需将锁对象的计数器减1。计数器为零代表锁已被释放。 2.2.2 显式锁 (即Lock)也有ReentrantLock这样的可重入锁。
重入锁,是指一个线程获取锁之后再尝试获取锁时会自动获取锁。 在Java中,除了ReentrantLock以外,synchronized也是重入锁。...ReentrantLock实现了Lock接口,Lock接口里面定义了java中锁应该实现的几个方法: // 获取锁void lock();// 获取锁(可中断)void lockInterruptibly...底层调用的是Unsafe的park()方法 LockSupport.park(this); // 返回是否已中断 return Thread.interrupted();} 看过之前彤哥写的【死磕...java同步系列之自己动手写一个锁Lock】的同学看今天这个加锁过程应该思路会比较清晰。...// java.util.concurrent.locks.ReentrantLock.unlock()public void unlock() { sync.release(1);}// java.util.concurrent.locks.AbstractQueuedSynchronizer.releasepublic
经常遇到 mysql锁死, 如 alter xx 语句就经常锁死数据表怎么解决?...就是图片第一列的id,如果还是无法解决且看第二条 2. select * from information_schema.innodb_trx; 此条即查到未结束的事务,可以酌情杀死冲突事务 一般都可解决锁死...如未解决可谨慎使用最后一招: kill掉 第一条命令查出来的与该锁表有关的所有查询进程!!! 谨慎使用!!!
问题 (1)什么是分布式锁? (2)为什么需要分布式锁? (3)mysql如何实现分布式锁? (4)mysql分布式锁的优点和缺点?...1,否则返回0; release_lock('user_1')如果该锁是当前客户端持有的则返回1,如果该锁被其它客户端持有着则返回0,如果该锁没有被任何客户端持有则返回null; 多客户端案例 为了便于举例...5 releaselock('user2', 0) -> null - 6 - getlock('user1', 0) -> 1 7 - releaselock('user1', 0) -> 1 Java...单机的锁将无法保证线程安全; (2)mysql分布式锁是基于 get_lock('key',timeout)和 release_lock('key')两个函数实现的; (3)mysql分布式锁是可重入锁...答:1)方便快捷,因为基本每个服务都会连接数据库,但是不是每个服务都会使用redis或者zookeeper; 2)如果客户端断线了会自动释放锁,不会造成锁一直被占用; 3)mysql分布式锁是可重入锁,
问题 (1)zookeeper如何实现分布式锁? (2)zookeeper分布式锁有哪些优点? (3)zookeeper分布式锁有哪些缺点?...这个锁。...,但是难免保证没有什么问题,比如不是重入锁,不支持读写锁等。...curator还提供了读写锁、多重锁、信号量等实现方式,而且他们是可重入的锁。...分布式锁有哪些优点?
所以就提供了读写锁。 读写锁维护着一对锁,一个读锁和一个写锁。...锁降级:遵循获取写锁、获取读锁在释放写锁的次序,写锁能够降级成为读锁 读写锁ReentrantReadWriteLock实现接口ReadWriteLock,该接口维护了一对相关的锁,一个用于只读操作,另一个用于写入操作...锁降级 上开篇是LZ就阐述了读写锁有一个特性就是锁降级,锁降级就意味着写锁是可以降级为读锁的,但是需要遵循先获取写锁、获取读锁在释放写锁的次序。...推荐阅读 因为里面很多地方涉及到了AQS部分,推荐阅读如下部分: 【死磕Java并发】—–J.U.C之AQS:AQS简介 【死磕Java并发】—–J.U.C之AQS:CLH同步队列 【死磕Java并发】...—–J.U.C之AQS:同步状态的获取与释放 【死磕Java并发】—–J.U.C之AQS:阻塞和唤醒线程 【死磕Java并发】—–J.U.C之重入锁:ReentrantLock ----
ReentrantLock还提供了公平锁也非公平锁的选择,构造方法接受一个可选的公平参数(默认非公平锁),当设置为true时,表示公平锁,否则为非公平锁。...公平锁与非公平锁的区别在于公平锁的锁获取是有顺序的。但是公平锁的效率往往没有非公平锁的效率高,在许多线程访问的情况下,公平锁表现出较低的吞吐量。 ?...当state == 0 时,则将锁持有线程设置为null,free= true,表示释放成功。 公平锁与非公平锁 公平锁与非公平锁的区别在于获取锁的时候是否按照FIFO的顺序来。...例如:时间锁等候,可中断锁等候,锁投票。...【死磕Java并发】—–J.U.C之AQS:AQS简介 【死磕Java并发】—–J.U.C之AQS:CLH同步队列 【死磕Java并发】—–J.U.C之AQS:同步状态的获取与释放 【死磕Java并发】
---- 问题 (1)条件锁是什么? (2)条件锁适用于什么场景? (3)条件锁的await()是在其它线程signal()的时候唤醒的吗?...简介 条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。...在java中,条件锁的实现都在AQS的ConditionObject类中,ConditionObject实现了Condition接口,下面我们通过一个例子来进入到条件锁的学习中。...源码分析 ConditionObject的主要属性 public class ConditionObject implements Condition, java.io.Serializable {...彩蛋 为什么java有自带的关键字synchronized了还需要实现一个ReentrantLock呢? 首先,它们都是可重入锁; 其次,它们都默认是非公平模式; 然后,...
所以就提供了读写锁。 读写锁维护着一对锁,一个读锁和一个写锁。...锁降级:遵循获取写锁、获取读锁在释放写锁的次序,写锁能够降级成为读锁 读写锁ReentrantReadWriteLock实现接口ReadWriteLock,该接口维护了一对相关的锁,一个用于只读操作,另一个用于写入操作...AbstractQueuedSynchronizer { /** * 省略其余源代码 */ } public static class WriteLock implements Lock, java.io.Serializable...{ /** * 省略其余源代码 */ } public static class ReadLock implements Lock, java.io.Serializable...4、锁降级 上开篇是LZ就阐述了读写锁有一个特性就是锁降级,锁降级就意味着写锁是可以降级为读锁的,但是需要遵循先获取写锁、获取读锁在释放写锁的次序。
所以就提供了读写锁。 读写锁维护着一对锁,一个读锁和一个写锁。...锁降级:遵循获取写锁、获取读锁在释放写锁的次序,写锁能够降级成为读锁 读写锁ReentrantReadWriteLock实现接口ReadWriteLock,该接口维护了一对相关的锁,一个用于只读操作,另一个用于写入操作.../** * 省略其余源代码 */ } public static class WriteLock implements Lock, java.io.Serializable.../** * 省略其余源代码 */ } public static class ReadLock implements Lock, java.io.Serializable...锁降级 上开篇是LZ就阐述了读写锁有一个特性就是锁降级,锁降级就意味着写锁是可以降级为读锁的,但是需要遵循先获取写锁、获取读锁在释放写锁的次序。
e.printStackTrace()导致的锁死 e.printStackTrace() 会导致锁死?这仅仅是打印啊,怎么可能?! 先别惊呼不可能,且听我细细道来。 先看截图1: ?...产生错误堆栈字符串到字符串池内存空间 -> 此内存空间一下子被占满了 -> 开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了 -> 大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)-> 相互等待,等内存,锁死了...3,推及开来,在java中,会产生大量字符串的方法,使用时,一定得悠着点,别一不小心撑到肚子(字符串池所属的那么点非堆内存空间),撑到肚子了,会死的啊 。
主要包括以下几篇文章: 死磕Synchronized底层实现--概论 死磕Synchronized底层实现--偏向锁 死磕Synchronized底层实现--轻量级锁(待更新) 死磕Synchronized...has_bias_pattern(), "biases should be revoked by now"); } slow_enter (obj, lock, THREAD) ; } 如果是正常的Java...= mark->bias_epoch()) { if (attempt_rebias) { assert(THREAD->is_Java_thread(), "");...对于需要safepoint的操作(VM_Operationevaluate_at_safepoint返回true)必须要等到所有的Java线程进入到safepoint才开始执行。...这是因为在Java中一个对象的hashcode是在调用这两个方法时才生成的,如果是无锁状态则存放在mark word中,如果是重量级锁则存放在对应的monitor中,而偏向锁是没有地方能存放该信息的,所以必须升级
【死磕 Java 并发】系列是 LZ 在 2017 年写的第一个死磕系列,一直没有做一个合集,这篇博客则是将整个系列做一个概览。 先来一个总览图: ?...【死磕Java并发】—–J.U.C之AQS:CLH同步队列 前线程已经等待状态等信息构造成一个节点(Node)并将其加入到CLH同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点唤醒(公平锁),...【死磕Java并发】—–J.U.C之重入锁:ReentrantLock 一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,...这篇博客带你理解 重入锁:ReentrantLock 内在本质。 【死磕Java并发】—–J.U.C之读写锁:ReentrantReadWriteLock 读写锁维护着一对锁,一个读锁和一个写锁。...锁降级:遵循获取写锁、获取读锁在释放写锁的次序,写锁能够降级成为读锁 【死磕Java并发】—–J.U.C之Condition 在没有Lock之前,我们使用synchronized来控制同步,配合Object
虽然后来解决了问题,但是数据库里这个用户登录信息表里被lock住的数据始终无法释放,这导致用户永远无法登陆成功,需要手动跑SQL把锁去掉才行。...a.relation = b.oid join pg_stat_activity c on a.pid = c.pid where a.mode like '%ExclusiveLock%'; 这里查的是排它锁,...也可以精确到行排它锁或者共享锁之类的。...这里有几个重要的column:a.pid是进程id,b.relname是表名、约束名或者索引名,a.mode是锁类型。...杀掉指定表指定锁的进程 1 2 3 4 5 6 7 8 9 10 11 12 select pg_cancel_backend(a.pid) from pg_locks a join pg_class
死磕Synchronized底层实现--轻量级锁 本文为死磕Synchronized底层实现第三篇文章,内容为轻量级锁实现。...轻量级锁并不复杂,其中很多内容在偏向锁一文中已提及过,与本文内容会有部分重叠。 另外轻量级锁的背景和基本流程在概论中已有讲解。强烈建议在看过两篇文章的基础下阅读本文。...本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括偏向锁、轻量级锁、重量级锁的加锁、解锁、锁升级流程的原理及源码分析,希望给在研究synchronized路上的同学一些帮助...主要包括以下几篇文章: 死磕Synchronized底层实现--概论 死磕Synchronized底层实现--偏向锁 死磕Synchronized底层实现--轻量级锁 死磕Synchronized底层实现...否则要走轻量级锁or重量级锁的释放流程 if (!
---- 问题 (1)自己动手写一个锁需要哪些知识? (2)自己动手写一个锁到底有多简单? (3)自己能不能写出来一个完美的锁?...简介 本篇文章的目标一是自己动手写一个锁,这个锁的功能很简单,能进行正常的加锁、解锁操作。 本篇文章的目标二是通过自己动手写一个锁,能更好地理解后面章节将要学习的AQS及各种同步器实现的原理。...关于Unsafe类的相关讲解请参考彤哥之前发的文章: 【死磕 java魔法类之Unsafe解析】 解决 一个变量 这个变量只支持同时只有一个线程能把它修改为1,所以它修改完了一定要让其它线程可见,因此,...如果要支持可重入也很简单,获取锁时检测锁是不是被当前线程占有着,如果是就把state的值加1,释放锁时每次减1即可,减为0时表示锁已释放。 (2)我们实现的锁是公平锁还是非公平锁?...答:非公平锁,因为获取锁的时候我们先尝试了一次,这里并不是严格的排队,所以是非公平锁。 (3)完整源码 关注我的公众号“彤哥读源码”,后台回复“mylock”获取本章完整源码。
问题 (1)redis如何实现分布式锁? (2)redis分布式锁有哪些优点? (3)redis分布式锁有哪些缺点? (4)redis实现分布式锁有没有现成的轮子可以使用?...其实不然,实现锁的必要条件只有第一个,对共享变量的控制,如果共享变量的值为null就给他设置个值(java中可以使用CAS操作进程内共享变量),如果共享变量有值则不断重复检查其是否有值(重试),待锁内逻辑执行完毕再把共享变量的值设置回...释放锁的时候,执行一段lua脚本,把这段lua脚本当成一个完整的命令,先检查这个锁对应的值是不是上面设置的随机值,如果是再执行del释放锁,否则直接返回释放锁失败。...我们知道,redis是单线程的,所以这段lua脚本中的get和del不会存在并发问题,但是不能在java中先get再del,这样会当成两个命令,会有并发问题,lua脚本相当于是一个命令一起传输给redis...分布式的公平锁/非公平锁/读写锁等),有兴趣的可以去看看,下面贴出链接: ?
领取专属 10元无门槛券
手把手带您无忧上云