(2)多线程
a、名词解释:
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:进程之内独立执行的一个单元执行流。线程——程序执行的最小单位
类比
CPU:一座时刻运行的工厂
进程:工厂的一个车间;工厂的电力有限,一次只能供给一个车间(车间相当于进程)使用
线程 :在车间里面活动的工人,人是活动的对象
进程的内存空间是线程共享的:车间的空间是工人们共享的,他们可以使用车间里面的各种房间,生产线,食堂,厨房,洗澡间,厕所等。
互斥锁:防止他人进入单人间的锁。先到的人进去后锁门,后到的人看到上锁,就在门口排队,等锁打开再进去。
信号量:可以进多人的多人间,门口挂n把开门钥匙
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可以评论留言或者私信~