ThreadLocal和synchronized的区别

ThreadLocal和synchronized的区别是:synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。从始至终,只存在一个资源,然后多个线程都去访问,那么就得排队,依次访问。而ThreadLocal可以部分解决synchronized排队问题,为每一个线程都提供了变量的副本,牺牲内存,提升效率。

ThreadLocal和synchronized的区别-Worktile社区

synchronized

synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。从始至终,只存在一个资源,然后多个线程都去访问,那么就得排队,依次访问。

缺点:效率低,得排队

synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchronized 块。

Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍可以访问该object中的非加锁代码块。

ThreadLocal

ThreadLocal是Thread的局部变量,用于编多线程程序,对解决多线程程序的并发问题有一定的启示作用。而ThreadLocal可以部分解决synchronized排队问题,为每一个线程都提供了变量的副本,牺牲内存,提升效率。

缺点:使得每个线程在某一时间访问到的并不是同一个对象,这样就违背了多个线程对数据的数据共享,因此,需要在一定的场景下才能使用,即允许备份的存在;反之,如果不允许备份,就不能使用。

ThreadLocal并不能替代synchronized:举个不恰当的例子,夫妻离婚,有个儿子,抚养权划给其中一个人,那么夫妻只能轮流探视,你没办法复制一个儿子出来,让双方都有一个儿子!

为了说明多线程访问对于类变量和ThreadLocal变量的影响,QuerySvc中分别设置了类变量sql和ThreadLocal变量,这种场景类似web应用中多个请求线程携带不同查询条件对一个servlet实例的访问,然后servlet调用业务对象,并传入不同查询条件,最后要保证每个请求得到的结果是对应的查询条件的结果。

延伸阅读:

synchronized 方法

1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入.

如在线程t1中有语句obj.synMethod(); 那么由于synMethod被synchronized修饰,在执行该语句前, 需要先获得调用者obj的对象锁, 如果其他线程(如t2)已经锁定了obj (可能是通过obj.synMethod,也可能是通过其他被synchronized修饰的方法obj.otherSynMethod锁定的obj), t1需要等待直到其他线程(t2)释放obj, 然后t1锁定obj, 执行synMethod方法. 返回之前释放obj锁.

2.对某一代码块使用,synchronized后跟括号,括号里是变量,这样,一次只有一个线程进入该代码块.此时,线程获得的是成员锁.

3.synchronized后面括号里是一对象,此时,线程获得的是对象锁.

对于3,如果线程进入,则得到当前对象锁,那么别的线程在该类所有对象上的任何操作都不能进行.在对象级使用锁通常是一种比较粗糙的方法。为什么要将整个对象都上锁,而不允许其他线程短暂地使用对象中其他同步方法来访问共享资源?如果一个对象拥有多个资源,就不需要只为了让一个线程使用其中一部分资源,就将所有线程都锁在外面。

文章标题:ThreadLocal和synchronized的区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37874

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年2月13日 上午2:07
下一篇 2023年2月13日 上午2:09

相关推荐

  • 时间管理工具有什么

    时间管理工具有:一、滴答清单;二、Todo清单;三、极简待办;四、Forest 专注森林;五、番茄TODO;六、Worktile。滴答清单的功能覆盖更加全面,除了待办事项,还能实现更多的时间管理需求,并且还支持多设备多平台同步。 一、滴答清单 最近爆火的一款清单管理软件,和其他APP相比,它的功能覆…

    2023年3月31日
    14500
  • 有什么好的文件的管理软件

    有什么好的文件的管理软件:1、Total Commander;2、Dropit;3、TagLyst;4、QTTabBar;5、Directory Opus;6、Adobe Bridge。Total Commander文件管理软件系统,功能强大且应有尽有,行业内非常有名。 一、Total Comman…

    2023年6月4日
    600
  • 前端开发语言有哪些

    前端开发语言有:1、html语言;2、css样式代码;3、javascript;4、jQuery;5、html5和css3;6、Ajax;7、Bootstrap;8、PHP语言。html语言是网页的基本标记语言,最基础的语言,掌握起来比较简单。 1、html语言 HTML的全称为超文本标记语言,是一…

    2022年12月30日
    4.4K00
  • oa办公用什么服务器

    oa办公用的服务器可以分为两种:一、入门级服务器;二、中高端服务器。入门级服务器适用于小型企业和中小型企业。这些服务器价格较低,一般在几千元到一万多元之间。入门级服务器的优势在于价格低廉,适合预算有限的企业。 一、入门级服务器 入门级服务器适用于小型企业和中小型企业。这些服务器价格较低,一般在几千元…

    2023年5月28日
    400
  • 知识交流平台有哪些

    知识交流平台有:一、中国知网;二、知乎;三、喜马拉雅;四、网易云课堂;五、蜻蜓FM;六、得到;七、慕课网。中国知网,始建于1999年6月,是中国核工业集团资本控股有限公司控股的同方股份有限公司旗下的学术平台。 一、中国知网 中国知网,始建于1999年6月,是中国核工业集团资本控股有限公司控股的同方股…

    2023年4月30日
    5200
  • 工作进度表怎么做

    以excel为例,做工作进度表的步骤:1、打开excel表格;2、创建项目进度表格;3、标记预计完成天数;4、设置单元格格式;5、选择“百分比”;6、选择一个颜色数据条;7、合并;8、输入进度比例。打开excel表格需要打开一个空白的表格。 一、制作工作进度表的步骤 二、如何创建适合的工作进度表 延…

    2023年2月24日
    17000
  • 团队管理方案怎么写

    写团队管理方案:1、组织架构明确;2、目标明确;3、权利和责任对等;4、工作可视化。组织架构明确是因为一个团队的组织架构是团队开展工作的基础,就像盖房子需要先有地基和框架一样,每个人都要有明确的位置和功能。 一、写团队管理方案 1、组织架构明确 一个团队的组织架构是团队开展工作的基础,就像盖房子需要…

    2023年4月7日
    2700
  • MySQL的source命令的含义是什么

    简单说source就是顺序执行文件中的SQL,如果中间出现了错误中断就停止了,而且不会回滚。source命令执行导入的sql脚本属于追加方式,严格按照脚本内容执行。MySQL数据库中表的数据可以使用truncate 命令清空所有数据。 简单说source就是顺序执行文件中的SQL,如果中间出现了错误…

    2023年5月29日
    500
  • 什么是进度跟踪

    进度跟踪是从项目团队收集进度信息并将其输入工作计划的过程。收集的信息应准确,并应定期来自所有项目资源,跟踪进度为项目经理提供了验证计划任务的估计工作量的第一个机会。 一、什么是进度跟踪 监视活动的一个非常重要的部分是跟踪。进度跟踪是从项目团队收集进度信息并将其输入工作计划的过程。收集的信息应准确,并…

    2023年1月12日
    8300
  • 看板管理用什么软件

    本文将详细介绍几种常见的看板管理软件:1、Trello;2、Asana;3、KanbanFlow;4、Jira。Trello的使用非常简单,只需要创建一个看板,然后添加卡片即可。卡片可以包含文本、图片、附件等信息。 1、Trello Trello是一款非常流行的看板管理软件,它的使用非常简单,只需要…

    2023年3月3日
    6200

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部