JAVA基础:装包、截屏、录屏的提效工具②(多线程)

本文介绍了进程与线程的概念,通过类比帮助理解它们的差异。在Java中,Swing是单线程的,可能导致界面卡顿。为避免这个问题,文章讨论了Java创建线程的三种方式,并结合实例`demo_03.java`说明如何通过多线程优化长耗时操作,如截图,确保用户界面的响应性。同时,文章提到了EDT(事件分发线程)在Swing中的作用和ANR(应用无响应)的问题,强调了正确处理线程以避免ANR的重要性。
摘要由CSDN通过智能技术生成
(2)多线程

a、名词解释:

进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。

线程:进程之内独立执行的一个单元执行流。线程——程序执行的最小单位

类比

CPU:一座时刻运行的工厂
进程:工厂的一个车间;工厂的电力有限,一次只能供给一个车间(车间相当于进程)使用
线程 :在车间里面活动的工人,人是活动的对象
进程的内存空间是线程共享的:车间的空间是工人们共享的,他们可以使用车间里面的各种房间,生产线,食堂,厨房,洗澡间,厕所等。
互斥锁:防止他人进入单人间的锁。先到的人进去后锁门,后到的人看到上锁,就在门口排队,等锁打开再进去。
信号量:可以进多人的多人间,门口挂n把开门钥匙

美图秀秀 > JAVA基础:XXTOOL的PC养成版 > image2020-11-15_19-23-0.png

b、实际问题:
demo_03.java

截图操作需要响应时间,提示语"截图中"无法展示

在这里插入图片描述

Swing是单线程的,所有的事件,例如键盘,鼠标事件,都会由工具包线程转换成swing事件,然后放到事件队列EventQueue中,而这个EventQueue的派发机制是由EDT来管理的。
在这里插入图片描述

任何修改组件状态的方法都应该在EDT(主线程)中执行,在EDT中执行长时间的事件,使EDT不能及时响应更新界面的事件,就是所说的界面卡。
为了避免在EDT中执行长时间的操作,采用多线程处理冗长的操作,比如截图操作,在这过程中需更新界面来给用户以提示,比如“截图中”提示语。

Java中线程的创建有如下三种基本形式:
①继承Thread类,重写该类的run()方法

②实现java.lang.Runnable接口

③使用Callable和Future接口创建线程

参考资料:

多线程的基础知识

实操:demo _03.java 优化后

在这里插入图片描述

c、ANR的原因和避免
在这里插入图片描述

需要demo可以评论留言或者私信~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值