[IDEA插件从零开始系列]-3.IDEA插件线程模型规则

1. 概要

如果大家写过GUI程序或者写过Android的都知道这类程序至少会分为UI线程和Background线程.UI线程中不能做耗时时间长的事件,但是更新UI上元素的时候只能在UI线程上操作,所以写这类程序都会涉及不停的UI线程和Background线程的切换.如果在UI线程上执行耗时过长的操作会导致界面卡顿或者假死等问题.

2. IDEA插件中线程规则

Idea中与代码相关的数据结构都是由一个单一的读写锁进行控制,如果需要访问以下数据必须要在读写锁范围内进行:

读取数据

IDEA插件允许所有线程上对 相关数据进行读取,如果在UI线程中读取不需要任何额外操作,但是如果在非UI线程中需要使用ApplicationManager.getApplication().runReadAction() 进行包裹执行

  • 注意 runReadAction() 尽量控制在最小的范围,尽量避免操作影响到其它线程对数据的读取

修改和写数据

写数据只能通过UI线程进行写操作,并且写的时候还是需要通过ApplicationManager.getApplication().runWriteAction() 进行包裹的

如果你需要从非UI线程中进行数据写入操作需要调用 ApplicationManager.getApplication().invokeLater()

  • 注意 runWriteAction() 尽量控制在最小的范围,尽量避免操作影响到其它线程对数据的写入
  • 注意 invokeLater() 尽量控制在最小的范围, 尽量避免对UI线程影响

后台执行操作

使用ProgressManager 可以进行后台长时间执行的动作

3. 检测手段

可以通过安装IDEA 的Thread插件,在断点的时候可以看到当前线程状态以及是否可以进行数据的读写

插件为:Thread Access Info

image-20211227114059505

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值