前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javaweb的线程安全与javaweb的多线程开发

javaweb的线程安全与javaweb的多线程开发

作者头像
用户1220053
发布2021-08-24 16:32:16
5150
发布2021-08-24 16:32:16
举报
文章被收录于专栏:DT乱“码”DT乱“码”

这是陈东景于2021年8月22日下午15点30分原创作品,转载请标明出处!!!!

在从事java项目的开发过程中,我们遇到的项目百分之八十都是javaweb的开发,就是基于http协议的浏览器、服务器的B/S架构。我们称这种类型的项目为javaweb项目。目前几乎所有的javaweb项目都有一套前端(HTML,JS,JqueryAjax)和一套后端(Spring全家桶的各种组合 ,java,数据库),以前是只有后端,通过servlet返回数据给浏览器解析。随着互联网技术的发展,javaWeb项目的开发流程出现了变化,当下最流行的是前后端分离的开发模式。

javaweb项目一般应用在什么场景呢?政府网站,电商购物网站,门户网站,游戏交互网站,银行系统,ERP系统,保险业务网站,快递物流网站,医院挂号系统,网约车平台,娱乐交友网站,招聘应聘网站,社区网站等等,在互联网时代背景下,无处不在。应用场景非常广泛。

这类项目的一个显著特征就是通过浏览器或者app或者小程序的一个URL就可以实现数据的交互。很多人很疑惑,基于spring的javaWeb是线程安全的吗?在开发过程中为什么没发现使用锁(整个controller到service到dao的过程没发现锁,如果遇到并发请求,会不会同时修改数据的结果?),但是为什么时候又需要用到锁,保证线程安全?当一个javaWeb项目发布上线以后,我们可以通过浏览器或者客户端随意的发送请求,调用服务。从这种结果来看,基于spring的javaWeb应该是线程安全的,要不然你在java代码里看不到一个锁,这怎么混的下去?我们不能保证前端客户端的请求永远是异步的,所以我们必须保证线程安全,才能保证程序的返回结果是预想中的,也是正确的。所以这里可以得出一个结论,如果你在开发javaweb中,没看到代码里对锁的处理,那说明此是架构使用的是springMVC的默认模式,是线程安全的!springMVC的默认模式为单例模式,当同时收到多个同一时刻的请求时,对象实体是共享的,处理是按顺序的,只是在并发量很小的情况下,处理的很快,我们在前端没有感觉。这种模式适合小型网站,并发量不高的网站,业务简单的网站,根本不需要多线程处理。

那我们要开发一些大型javaWeb网站,需要支持很大的并发量,也需要异步处理业务的情况下,或者需要处理一些定时任务,或者我们需要在很短的时间内完成一个复杂的计算,该怎么处理呢?

这里就需要使用到多线程。

多线程使用到的业务场景:

场景1:快速处理高并发,比如网站搞活动下订单,火车飞机购票

场景2:异步处理业务,比如数据读写分离,数据同步

场景3:定时任务,在指定的时间新起一个线程,自动触发处理过程,比如数据备份

场景4:在很短的时间内完成一个复杂的计算,比如人类基因组信息的计算

等等,各种复杂的场景情况下都会使用到多线程。

那javaweb里的多线程是怎么实现和处理的呢?有几种方式:

1.继承Thread类,重写run的方法,新建一个线程(Thread)实体对象,调用start方法就可以开启一个线程

2.实现runable接口,实现run方法,新建注入一个(Thread)对象,调用start方法就可以开启一个线程

3.实现callable接口,这种方式可以返回线程的结果,前两者是无返回结果(void)的线程

以上讲的的是简单的例子,实际javaWeb项目如果做成分布式,业务复杂度又会高一些,比如

场景1:业务就是相对复杂的,而且可能还需要使用锁的机制保证数据的一致性。

场景2:数据读写分离,数据同步,我们只需要起不同的线程异步处理就可以了,读和写之间也可以加入缓存机制,就不需要锁来控制数据的强一致性。

场景3:我们就制作一个定时任务,起一个新的线程就可以完成数据的备份,不影响其他的业务请求。不需要加锁。

场景4:类基因组信息的计算。我们可以对计算单元进行分解,起N个线程去计算,得到中间结果后合并,这里的n可能是10也可能是100,具体看计算的复杂度。

其实在多线程编程中,很多情形我们不需要加锁处理,但是难免会遇到需要保证业务数据的一致性。这就需要引入锁的机制。

synchronized

Lock

各种锁大致有10几种之多,针对不同的业务场景,选择不同的锁,一保证多线程处理的最高性能,第二保证数据的一致性,不出差错。这里就不展开讲了,下一次再总结一下。

这里就是javaweb多线程开发的应用场景和处理方式以及遇到需要锁问题的粗略讲解。不喜勿喷,希望对你们有用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档