线程锁有几种实现方式(java多线程‘锁’,是用什么锁的,有方法)

2025-02-17 18:00:03 0

线程锁有几种实现方式(java多线程‘锁’,是用什么锁的,有方法)

本文目录

java多线程‘锁’,是用什么锁的,有方法

多线程的同步锁通过synchronized实现有俩种方式 一种是在代码块加锁代码块加锁时可以指定任意类的实例过的对象即锁在这个对象上(任何对象都有一个锁)使同一时间内只有一个线程可以访问到代码块中另外一种就是以synchronized关键字修饰方法这时加锁的对象就是类本身的实例 即this以上 O(∩_∩)O

分布式锁的三种实现方式

分布式锁的三种实现方式分别是:基于数据库实现分布式锁、基于缓存(Redis等)实现分布式锁、基于Zookeeper实现分布式锁。

一、基于数据库实现分布式锁

1、悲观锁

利用select … where … for update 排他锁。

注意:其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。

2、乐观锁

所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有update version失败后才能觉察到,抢购和秒杀就是用了这种实现以防止超卖,通过增加递增的版本号字段实现乐观锁。

二、基于缓存(Redis等)实现分布式锁

1、使用命令介绍:

(1)SETNX

SETNX key val:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。

(2)expire

expire key timeout:为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。

(3)delete

delete key:删除key

在使用Redis实现分布式锁的时候,主要就会使用到这三个命令。

2、实现思想:

(1)获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。

(2)获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。

(3)释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。

三、基于Zookeeper实现分布式锁

ZooKeeper是一个为分布式应用提供一致性服务的开源组件,它内部是一个分层的文件系统目录树结构,规定同一个目录下只能有一个唯一文件名。

基于ZooKeeper实现分布式锁的步骤如下:

(1)创建一个目录mylock。

(2)线程A想获取锁就在mylock目录下创建临时顺序节点。

(3)获取mylock目录下所有的子节点,然后获取比自己小的兄弟节点,如果不存在,则说明当前线程顺序号最小,获得锁。

(4)线程B获取所有节点,判断自己不是最小节点,设置监听比自己次小的节点。

(5)线程A处理完,删除自己的节点,线程B监听到变更事件,判断自己是不是最小的节点,如果是则获得锁。

扩展资料;

一、数据库分布式锁实现的缺点:

1、db操作性能较差,并且有锁表的风险。

2、非阻塞操作失败后,需要轮询,占用cpu资源。

3、长时间不commit或者长时间轮询,可能会占用较多连接资源。

二、Redis(缓存)分布式锁实现的缺点:

1、锁删除失败,过期时间不好控制。

2、非阻塞,操作失败后,需要轮询,占用cpu资源。

三、ZK分布式锁实现的缺点:

性能不如redis实现,主要原因是写操作(获取锁释放锁)都需要在Leader上执行,然后同步到follower。

线程的几种控制方式以及线程间的几种通信方式

几种进程间的通信方式(1) 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有血缘关系的进程间使用。进程的血缘关系通常指父子进程关系。(2)有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间通信。(3)信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。(4)消息队列(message queue):消息队列是由消息组成的链表,存放在内核中 并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。(5)信号(signal):信号是一种比较复杂的通信方式,用于通知接收进程某一事件已经发生。(6)共享内存(shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC方式,它是针对其他进程间的通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信。(7)套接字(socket):套接口也是一种进程间的通信机制,与其他通信机制不同的是它可以用于不同及其间的进程通信。几种线程间的通信机制1、锁机制1.1 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法。1.2 读写锁:允许多个线程同时读共享数据,而对写操作互斥。1.3 条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。2、信号量机制:包括无名线程信号量与有名线程信号量3、信号机制:类似于进程间的信号处理。线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制。

java线程锁有几种

1、自旋锁2、自旋锁的其他种类3、阻塞锁4、可重入锁5、读写锁6、互斥锁7、悲观锁8、乐观锁9、公平锁10、非公平锁11、偏向锁12、对象锁13、线程锁14、锁粗化15、轻量级锁16、锁消除17、锁膨胀18、信号量

IOS中实现线程加锁的几个方法

iOS 线程加锁的方式具体有如下几种:

  • NSLock实现的锁。

    NSLock是Cocoa提供给我们最基本的锁对象,这也是我们经常所使用的,除lock和unlock方法外,NSLock还提供了tryLock和lockBeforeDate:两个方法,前一个方法会尝试加锁,如果锁不可用(已经被锁住),刚并不会阻塞线程,并返回NO。lockBeforeDate:方法会在所指定Date之前尝试加锁,如果在指定时间之前都不能加锁,则返回NO。

  • 使用synchronized关键字构建的锁

    @synchronized指令使用的obj为该锁的唯一标识,只有当标识相同时,才为满足互斥,如果线程2中的@synchronized(obj)改为@synchronized(other),刚线程2就不会被阻塞,@synchronized指令实现锁的优点就是我们不需要在代码中显式的创建锁对象,便可以实现锁的机制,但作为一种预防措施,@synchronized块会隐式的添加一个异常处理例程来保护代码,该处理例程会在异常抛出的时候自动的释放互斥锁。所以如果不想让隐式的异常处理例程带来额外的开销,你可以考虑使用锁对象。

  • 使用C语言的pthread_mutex_t实现的锁

    //主线程中TestObj *obj = ;    pthread_mutex_unlock(&mutex);});

  • 使用GCD来实现的”锁”

    //主线程中TestObj *obj = ;    dispatch_semaphore_signal(semaphore);});

线程锁有几种实现方式(java多线程‘锁’,是用什么锁的,有方法)

本文编辑:admin

更多文章:


linux分区命令(linux 如何查看分区)

linux分区命令(linux 如何查看分区)

本文目录linux 如何查看分区linux服务器数据盘怎么分区linux硬盘分区linux的常见的分区类型有哪些linux系统中对新磁盘分区可以使用的命令linux 如何查看分区1、首先登录linux服务。2、有几种方法可以查看,我们使用第

2025年2月28日 06:20

计算机原理及应用(计算机原理的主要应用)

计算机原理及应用(计算机原理的主要应用)

本文目录计算机原理的主要应用计算机的运算方法及原理是什么谁帮我解答微型计算机原理及应用试题微型计算机原理及应用的介绍电脑的原理是什么计算机的应用原理是什么简述计算机系统的组成及工作原理简述计算机的工作原理计算机原理的主要应用1、科学计算2、

2025年2月13日 16:30

pcan explore 导入dbc,很多信息丢失?什么是Symantec pcAnywhere

pcan explore 导入dbc,很多信息丢失?什么是Symantec pcAnywhere

本文目录pcan explore 导入dbc,很多信息丢失什么是Symantec pcAnywherepcan explore 导入dbc,很多信息丢失PCAN-Explorer5是一个监测CAN网络传输数据的通用工具。通过自定义的symb

2025年3月21日 15:40

源程序可读性(源程序的质量)

源程序可读性(源程序的质量)

本文目录源程序的质量什么叫程序的可读性机器语言和汇编语言在移植性、可读性有什么特点C语言当中源程序的定义和作用源代码是不是编辑好的程序,但还没转换成我们平时用的那种程序它有什么用知道源代码有什么好处要源代码用了干什么软件编程规范的可读性要求

2025年2月10日 11:40

局部变量和成员变量(成员变量和局部变量的作用范围分别是)

局部变量和成员变量(成员变量和局部变量的作用范围分别是)

本文目录成员变量和局部变量的作用范围分别是JAVA中局部变量和成员变量的区别什么是局部变量和成员变量希望能举例,在编程里指明(2) 局部变量和成员变量的区别是什么成员变量和局部变量有什么区别什么是成员变量和局部变量 java局部变量和成员变

2025年3月12日 20:30

ata file(data files是什么意思)

ata file(data files是什么意思)

本文目录data files是什么意思data file is broken or in invalid version.please try reinstall application什么意思手机内存卡音乐文件中ata是什么意思ORACL

2025年3月21日 09:10

什么软件可以用做随机抽奖工具?用excel表 怎么设置一个随机抽奖

什么软件可以用做随机抽奖工具?用excel表 怎么设置一个随机抽奖

本文目录什么软件可以用做随机抽奖工具用excel表 怎么设置一个随机抽奖如何用PPT制作一个随机抽奖的幻灯片或提供一个抽奖器数字滚动抽奖软件什么软件可以用做随机抽奖工具其实抽奖的玩法有挺多样的。可以是运气性发奖,也可以是竞技性发奖。经过细致

2025年2月19日 02:10

eclipse功能介绍(eclipse是干什么的用的啊)

eclipse功能介绍(eclipse是干什么的用的啊)

本文目录eclipse是干什么的用的啊eclipse 是什么eclipse做什么用的eclipse是干嘛用的eclipse是什么意思eclipse常用的一些功能能详细介绍Eclipse么谢谢eclipse怎么创建web项目eclipse是干

2025年2月25日 07:50

triggered翻译(汽车专业英语翻译)

triggered翻译(汽车专业英语翻译)

本文目录汽车专业英语翻译cam0 was triggered 什么意意思triggered as to汉译英 高手来翻译啊~急~谁可以帮我翻译这7个句子,懂语法的才来大家帮帮忙,翻译成英语汽车专业英语翻译英文翻译成中文: 1.key cyl

2025年3月2日 09:30

java轻松入门(想学习java,应该怎样快速的入门呢)

java轻松入门(想学习java,应该怎样快速的入门呢)

本文目录想学习java,应该怎样快速的入门呢自学java,从哪儿开始怎么自学java想学习java,应该怎样快速的入门呢要想学好Java,应该注重以下几个方面入手。  1、正确理解Java的各种“抽象”。学习Java就是学习各种“抽象”,包

2025年3月25日 09:50

无法加载购物车数据(为什么淘宝网一点开购物车就是无法显示网页)

无法加载购物车数据(为什么淘宝网一点开购物车就是无法显示网页)

本文目录为什么淘宝网一点开购物车就是无法显示网页无法加载购物车数据,淘宝的购物车打不开是怎么回事淘宝网里无法加载购物车的数据是怎么回事呀steam获取购物车信息失败怎么办淘宝无法加载购物车数据淘宝上,点加入购物车,,半天没反应..然后提示“

2025年3月11日 09:40

compensate翻译(英语vistors will be compensated怎么翻译)

compensate翻译(英语vistors will be compensated怎么翻译)

本文目录英语vistors will be compensated怎么翻译弥补的的英语翻译 弥补的用英语怎么说补偿差价 英文怎么说英语vistors will be compensated怎么翻译“Visitors will be comp

2025年2月10日 15:40

傅里叶变换公式推导(如何理解“傅里叶变换公式”)

傅里叶变换公式推导(如何理解“傅里叶变换公式”)

本文目录如何理解“傅里叶变换公式”f(t)=coswt的傅里叶变换怎么求在线等怎样推导f(a*t)的傅里叶变换公式如何理解“傅里叶变换公式”表示能将满足一定条件的某个函数表示成三角函数或者它们的积分的线性组合。傅立叶变换 傅立叶变换能将满足

2025年3月21日 02:30

顺义php培训(谁知道北京php培训出来就业比较好的机构)

顺义php培训(谁知道北京php培训出来就业比较好的机构)

本文目录谁知道北京php培训出来就业比较好的机构北京php培训哪个好哪个好北京PHP培训机构周六日哪里的课程教的好求北京PHP培训的学费,课时,收费方式,北京通州或者顺义这边学网站设计师培训多少钱北京有哪家教PHP的培训机构啊北京顺义京金培

2025年2月21日 17:20

sunday怎么念(星期日的英文怎么读)

sunday怎么念(星期日的英文怎么读)

本文目录星期日的英文怎么读Sunday怎么读sunday这个的音标是什么呢呢sunday怎么读sunday小学生怎么发音星期日的英文怎么读星期日 英文:Sunday; Sun.; first day; 星期一:Monday 桑

2025年2月26日 06:00

注释与参考文献的区别(引用 参考文献与注释的区别和关系)

注释与参考文献的区别(引用 参考文献与注释的区别和关系)

本文目录引用 参考文献与注释的区别和关系毕业论文的注释与参考文献有什么区别引用 参考文献与注释的区别和关系1、区别:参考文献是作者撰写论著时所引用的已公开发表的文献书目,集中列表于文末;注释主要包括释义性注释和引文注释,一般排印在该页地脚或

2025年4月5日 09:50

antenna公司(“国民MC”刘在石签约柳熙烈公司,他们两人将会擦出怎样的火花)

antenna公司(“国民MC”刘在石签约柳熙烈公司,他们两人将会擦出怎样的火花)

本文目录“国民MC”刘在石签约柳熙烈公司,他们两人将会擦出怎样的火花刘在石签约柳熙烈公司,他为何会选择这家公司刘在石签约柳熙烈公司,他为什么会选择这家公司谁能帮我找家深圳公司的电话,或上海分公司的电话也行什么叫carrier antenna

2025年2月9日 23:10

什么是技术技术的定义是什么?什么是技术

什么是技术技术的定义是什么?什么是技术

本文目录什么是技术技术的定义是什么什么是技术运用PHP mysql数据库开发集成一系列工具的系统平台所需要的技术关键是什么最新的javaee技术是什么开发网站如果用到PHP,需要掌握哪些技术和知识技术是什么什么是技术技术的定义是什么技术:技

2025年3月25日 19:10

fedora14(fedora14 可以在终端输入命令,但是鼠标点什么都没用)

fedora14(fedora14 可以在终端输入命令,但是鼠标点什么都没用)

本文目录fedora14 可以在终端输入命令,但是鼠标点什么都没用fedora14 怎样不用root登录怎样修改账户权限fedora14 可以在终端输入命令,但是鼠标点什么都没用鼠标移到左上角Activities(活动)那里,在那里面找Te

2025年3月19日 11:00

uninstalled(uninstaller是什么意思)

uninstalled(uninstaller是什么意思)

本文目录uninstaller是什么意思uninstall是啥意思uninnstall是什么意思uninstaller是什么意思uninstallern.卸载程序; 反装置器网络便捷卸载; 卸载工具; 卸载软件形近词:uninstalled

2025年3月5日 02:20

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索