1. 使用Application.DoEvents()

2. async

3. await

4. Task

5. BackgroudWorker组件

线程耗尽:我们知道java程序中,所有计算都是通过线程来执行的,同时我们为了能够重复利用线程,避免频繁创建线程而消耗资源,一般我们都使用线程池,既然是池,那就表明线程是有限的,既然是有限的就会有耗尽的时候。当我们应用中的线程耗尽了,同时所有已经持有线程的计算任务迟迟不释放线程,那就导致请求超时,系统假死。

例子:

最近我们又遇到了一些类似这样的问题,情况大概是这样的: 业务场景:业务1需要完成两个任务:任务A,任务B,这两个任务相互独立,没有依赖。

问题 A、B这两个任务使用同一个线程池进行多线程并发处理,导致请求超时。

分析:

1、串行处理业务1的过程是这样的:

系统接到业务1,然后交由线程Th去处理。线程Th先处理A,接着处理B,然后释放线程Th。如果任务A、B任何出现等待都会导致线程Th等待。

2、并行处理业务1的过程是这样的:

(1)系统接到业务1,然后交由线程Th去处理。线程Th从线程池中获取线程1处理A,线程2处理B。此时A、B分别由线程1,线程2同时进行,当线程1和线程2都完成任务并释放回到线程池,线程Th也就释放了。

(2)但是任务A、B使用同一个线程池(假设线程池数量=10)进行多线程并发处理,当突然有大量这个业务请求,就会出现任务A把线程池的10个线程全部占用,任务B就会一直等待线程来处理。

(3)要完成业务1,需要完成A、B,但是显然已经完成A的线程1,需要获取一个线程2来处理B,才能将线程1释放,但是线程池耗尽,线程1会陷入一直等待的状态,这也导致了线程Th也是一直等待,最终就是请求超时。

解决方案:

1、可以改为串行执行A、B

2、或者使用不同的线程池处理A、B

线程耗尽一般现象:

1、请求超时,系统假死

2、大部分线程都是在等待(查看线程工具:jdk自动的jps)

3、cpu使用率不高

可能导致线程耗尽的情况:

1、一个业务中的多个任务,由不同线程池处理(上述例子)

2、IO处理未设置超时时间(这个去年遇到过)。

3、使用java 的queue超时时间 是否设置了

关于多线程并发处理的使用,我都会问自己以下几个问题:

1、我们是否真的需要使用多线程并发处理?

2、这样做是否真的解决了问题?

3、资源如何分配?(并不是线程越多处理越快)

转载于:https://www.cnblogs.com/JianGuoWan/p/8885997.html

UI 假死的可能性和处理方法总结相关推荐

  1. w10新建文件夹就卡死_Win10系统新建文件夹假死的3种解决方法

    在使用win10系统的过程中,我们经常会在电脑中新建文件夹来使用,可是有win10系统用户却遇到了新建文件夹假死的情况,想必有很多用户也遇到过一样的情况吧,针对这个问题,小编就给大家带来Win10系统 ...

  2. 一个死锁导致 UI 假死的例子

    现象 当 APP 启动一段时间后(约半小时左右),经常会发现 App 界面出现"冻死"的现象.同时后台输出: [CocoaGoPush]WorkThreadProc end 这时 ...

  3. 计算机开机后无法网络拨号怎样处理,拨号上网时电脑假死的原因和解决方法

    用拨号上网时,有时候遇到电脑假死, 就是刚装了宽带的时候,电脑一开机出现拨号连接的时候电脑就死机, 其实电脑没有死机, 就是假死,要过上几分钟电脑自动好.没什么大问题,只是对于电脑初学者来说难免有一些 ...

  4. 五种Windows 7假死的情景与处理方法

    自己的笔记本经常假死,但又舍不得重装,当然,这种想法也是不对的,我们应该学会解决问题,而不是逃避,这里记录一下解决问题的方法. ------------------------我是分割线------- ...

  5. 解决Windows 8系统假死的方法

    大部分半卡死的现象是因为Dynamic Tick的一个Bug.Dynamic Tick是NT 6.2内核的一个新功能(其实Linux早就有了),原理的话大概是在空闲的时候把CPU完全暂停,来节省电量. ...

  6. 桌面计算机未响应怎么办,电脑桌面假死(点击无反应)怎么解决?试试这三种处理方法吧...

    原标题:电脑桌面假死(点击无反应)怎么解决?试试这三种处理方法吧 不少朋友提到遇到过电脑桌面假死,桌面图标怎么点击都没反应,最后无奈只能强制关机才能解决问题.有什么方法可以不用强制关机就能解决电脑假死 ...

  7. 计算机新建文件夹的步骤打开,Win10新建文件夹假死,不要慌!教你这三种方法,轻松应对。...

    原标题:Win10新建文件夹假死,不要慌!教你这三种方法,轻松应对. 使用电脑开启文件夹是我们日常电脑使用过程中,经常会进行操作的事情.而有时我们在使用win10打开文件夹的时候会出现假死的现象,打开 ...

  8. 计算机老出现无法响应,电脑经常出现假死或未响应怎么处理

    电脑在使用过程中常常会因为软件.硬件问题或是操作不当等原因出现故障,而死机就是其中最常见的故障之一,最近就有很多小伙伴反映自己的电脑经常出现假死或未响应,出现这种情况虽然有点麻烦,但是还是可以解决的, ...

  9. 桌面计算机打开无响应,电脑桌面假死(点击无反应)怎么解决?

    不少朋友提到遇到过电脑桌面假死,桌面图标怎么点击都没反应,最后无奈只能强制关机才能解决问题.有什么方法可以不用强制关机就能解决电脑假死问题吗?当然有!还不至一种呢.下面就一起来看看三种处理电脑桌面假死 ...

最新文章

  1. Android switchCompat. 和 Switch
  2. java Spring 生命周期
  3. win10添加新用户
  4. boost::parameter::aux::maybe相关的测试程序
  5. C#设计模式(3)——工厂方法模式
  6. 计算机解译地学应用效果,不同的遥感解译方法在地表覆盖分类信息提取中的应用研究...
  7. 树莓派接入公网(花生壳)
  8. c#爬虫-1688官网自动以图搜图
  9. php 支付加密,关于支付时rsa加密解密的函数
  10. 计算机专业毕业论文指导记录详细,毕业论文指导记录怎么写 了解一下
  11. springboot文件上传大小限制:The field file exceeds its maximum permitted size of 1048576 bytes
  12. VLAN隔离葵花宝典(一)
  13. 关于maven仓库的配置步骤
  14. IoT坐标系下,智能路由器将画出一条怎样的进化曲线?
  15. marked is not a function问题解决
  16. web项目连接阿里云云数据库RDS-MySQL8.0
  17. ON-LSTM:用有序神经元表达层次结构
  18. css button自动调整位置_CSS 小技巧
  19. 【yoyo】点击切换图片
  20. 幕布,为知笔记和 Effie 哪个更适合单口或脱口秀作者?

热门文章

  1. android 屏幕录制方案,Android录制屏幕的实现方法
  2. vue seo关键词设置_网站文章中如何设置关键词才更有利于SEO优化?
  3. c# mysql datetime 判断为空 dbnull_转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究...
  4. python短信验证码_玩转python之获取短信验证码
  5. 系统学习NLP(十二)--文本表示综述
  6. 光流(四)--Kanade-Lucas-Tomasi(KLT)目标跟踪
  7. java 从m个数中均匀找出n个数_M个数里面找出最大的N个数
  8. 大学生html作业总结,总结 HTML标签作业
  9. java获取当前年月日历_转:JavaCalendar获取年、月、日、时间
  10. IE下AJAX请求只有一次