开发者社区> 问答> 正文

如果高并发请求同一个方法会造成线程安全吗?

tomcat是如何对处理并发请求的,是对每个访问都创建一个线程然后当一个线程进入到方法中,其他线程阻塞?

展开
收起
蛮大人123 2016-02-22 15:35:22 4635 0
2 条回答
写回答
取消 提交回答
  • 分多种情况: 1)静态方法。这种情况不会有线程安全问题 2)加锁的非静态方法。这种情况也不会 3)未加锁且操作共享数据的非静态方法,这种情况会有线程安全问题
    2019-07-17 18:46:46
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    这当然是不可能的,否则不可能应付数以千计的并行请求。Tomcat 7 的 Connector 分为两种模式,NIO (非阻塞)和 BIO (阻塞)。其中 NIO 用固定数目线程接受全部连接请求,Web 应用程序用 Java NIO API 来处理。BIO 则对每个请求在一个单独的线程池上获取线程来处理。
    NIO 本身占用线程较少,代价是应用开发者需要用 Buffer 处理。应用开发者需要管理 Buffer 和保护它们。提供的并行性能力较强。
    BIO 提供阻塞流,应用开发比较容易。每个请求在单独线程中,应用开发者需要保护自己的共用数据结构(一般用 Lock 或 Synchronize)。它提供的并行性能力较弱。

    2019-07-17 18:46:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
徐雷-Java为王,互联网高并发架构设计与选型之路6.0 立即下载
Redis 的高并发实战:抢购系统 立即下载
MySQL高并发场景实战 立即下载