java web 中并发访问的线程安全

本文探讨了Java Web应用在并发访问时的线程安全问题。讲解了Web服务器处理请求的不同模型,包括单线程、多线程、线程池以及基于NIO的非阻塞IO。重点讨论了Servlet和Spring MVC中的线程安全,强调避免声明共享的可变变量以确保线程安全。最后,作者提出尽管日常开发中可能感觉不到线程安全问题,但深入理解多线程对于使用底层API和框架的重要性。
摘要由CSDN通过智能技术生成

前言:最近在学习《Java并发编程实战》 感觉是有一定的难度。正在努力的理解如何编写多线程安全的程序。
发现线程不安全的核心:对共享数据的修改
这就联想到了 Java web ,web 所在的环境就是高并发的,那么如何在高并发的环境下保证自己的web 项目是安全的???

一:web服务器 接收请求时的线程情况

web 服务器处理请求的几种模式:

  1. 收到一个请求就处理,此时不能处理其他的请求,直到这个请求处理完成,这是单线程模型,无法并发,一个请求没处理完服务器就会阻塞,无法处理下一个请求。一般不采用这种方式
  2. 收到一个新的请求就开一个线程去处理,这样的方式看似非阻塞,但是实际上也是阻塞的。相对于1模式来说他是有一定的并发量,但是频繁的开线程也十分的消耗资源
  3. 类似2的模型,但是不是每次收到请求就开一个新的线程,而是使用线程池
    如果不了解线程池,你可能会了解数据库连接池,由于频繁创建、关闭数据库连接会消耗资源,所以会用数据库连接池来保存一定数量的连接,如果需要就从连接池里取连接,不需要则放回连接池,不在频繁创建。线程池也是一样的道理,线程池管理多线程,性能比频繁创建线程高得多。这种方式实现的服务器性能会比2高。不过,它依然是阻塞的。线程池的线程数量通常有限制的,如果所有线程都被阻塞(例如网速慢,或者被人恶意占用连接),那么接下来的请求将会排队等待。
  4. 基于Java NIO实现的服务器模型
    上面说到的几种模型ÿ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值