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

本文介绍了JavaWeb项目的主要应用场景,强调了前后端分离的开发模式,并讨论了Spring MVC的线程安全性。在高并发和复杂业务场景下,多线程的使用变得必要。文章列举了多线程常见的使用场景,并提到了实现多线程的三种方式。最后,提及在确保数据一致性时,锁机制的重要性。
摘要由CSDN通过智能技术生成

这是陈东景于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多线程开发的应用场景和处理方式以及遇到需要锁问题的粗略讲解。不喜勿喷,希望对你们有用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值