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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JavaWeb多线程编程指的是在JavaWeb应用程序中使用多线程来实现并发处理请求的编程技术。通过多线程编程,可以提高Web应用程序的并发处理能力和响应速度。 在JavaWeb多线程编程中,可以使用以下几种方式来实现多线程: 1. 使用Thread类:可以创建一个继承自Thread类的子类,并重写其run()方法来定义线程的执行逻辑。通过创建多个线程对象,可以同时处理多个请求。 2. 使用Runnable接口:可以创建一个实现了Runnable接口的类,并实现其run()方法来定义线程的执行逻辑。然后,可以将该类的对象作为参数传递给Thread类的构造方法,创建多个线程对象进行并发处理。 3. 使用线程池:可以使用Java提供的线程池ExecutorService来管理线程,通过提交任务给线程池,由线程池负责创建和管理线程。这种方式可以更好地控制线程的数量和生命周期,提高资源利用率。 在JavaWeb多线程编程中,需要注意以下几点: 1. 线程安全:确保共享资源在多个线程之间的访问安全,避免出现竞态条件和数据不一致等问题。可以使用同步机制(如synchronized关键字、Lock接口)来保证线程安全。 2. 上下文切换:多线程并发执行时,线程之间会发生上下文切换,这会带来一定的性能开销。需要合理安排线程的数量和调度策略,避免频繁的上下文切换。 3. 资源管理:多线程并发执行时,需要合理管理和分配系统资源,如数据库连接、线程池大小等,以避免资源竞争和资源浪费。 总之,JavaWeb多线程编程可以提高Web应用程序的并发处理能力和响应速度,但需要注意线程安全、上下文切换和资源管理等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋力向前123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值