Hvitur 2023-02-19 15:57 采纳率: 100%
浏览 20
已结题

java多线程实际使用时需要new线程吗。

多线程开发的时候,比如说买票,三个窗口卖100张票,教学视频里都是在代码里new三个线程模拟卖100张票。
但是在实际的使用场景中,不是模拟的时候,实际的窗口去卖票。
1.开发的时候还要为每个窗口new线程吗?
2.还是直接不需要考虑new线程的事,在票数上面加锁就行了。
3.如果需要new线程的过程是不是直接就是窗口调用线程池里面的线程(或者操作票的时候给窗口new个线程),来操作票数,这时候线程池里有两个线程的话,三个窗口同时操作是不是就阻塞一个窗口。
4.如果不考虑new线程的过程,那线程池是什么时候用的,什么情况下会new线程。
5.看项目代码的时候一个查询的接口,传入一个flag为1或0,分别代表通过和没通过的数据判断,接口里面通过判断调用1和0调用不同的sql语句查询出不太的数据返回。没有看到有关new线程的地方。但是接口里面加了同步锁,这是因为如果很多人调这个接口的话会产生返回数据错误的问题吗,加了同步锁的话是不是跟多线程又有关系了。这样的话new线程是在什么时候new的。和买票的new线程的时候一样吗。

  • 写回答

4条回答 默认 最新

  • a1767028198 2023-02-19 16:21
    关注

    线程池一句两句说不清,线程池几个核心参数,核心线程数,最大线程数,队列以及拒绝策略,比较完美的运行场景是线程池创建的线程达到核心线程数,阻塞队列的消费速率大于等于入队速率,
    线程的创建是线程池运行任务时创建的,当你把一个任务交付线程池运行时,线程池内部首先是判断核心线程数满了没(暂时不考虑配置线程存活时间的场景),没满线程直接创建,在这个阶段的任务,基本上都是直接创建线程,而这个过程对你不可见,当所有核心线程都在处理任务时,再入队的任务则是会堆积到阻塞队列,这时候会一直队列堆积数据,直到达到上限(这里如果你选择的队列类型是无界队列,一直堆积任务的结果就是oom),当队列也达到上限后,才会去创建非核心线程(线程数= 最大线程数- 核心线程数),达到最大线程数以后,你再交给线程池的任务,就会执行拒绝策略了!
    然后就是和你的项目对应起来,web容器会为每一个请求,单独分配一个线程去处理任务,这里就是线程池做的事情,对应到上面,http请求就是任务,当你使用多个浏览器打开同一个页面时,这就有多线程了,线程的创建就是在你发起http请求时,线程池自行决定是否创建线程还是复用线程

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 修改了问题 2月19日
  • 创建了问题 2月19日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么