1. 在代码的各个位置都须要调用poll方法来获得输入事件(这样的方式将给代码带来极大的混乱) 2. 通过一个“主事件循环(Main Event Loop)”来间接地运行应用程序的全部代码。 假设在主事件循环中调用的代码须要非常长时间才干运行完毕,那么用户界面就会“冻结”,直到代码运行完毕。这是由于仅仅有当运行控制权返回到主事件循环后,才干处理兴许的用户界面事件。
非常多尝试多线程的GUI框架的努力,最总都由于静态条件和死锁导致的稳定性问题,又回到单线程的时间队列模型的老路上。 1. 顺序事件处理 由于仅仅有唯一的线程在处理GUI任务。全部任务都不须要考虑并发且都是顺序运行,可是问题是假设在任务中运行时间过长,或导致兴许操作无法响应。(Android会提示Andorid Not Response异常) 2. Swing中的线程限制 GUI的单线程规则:组件与模型仅仅能在事件分派线程中被创建、改动和请求。 在Andorid中假设在子线程进行创建或者更新UI操作会抛出异常。
1. 取消 2. 进度与完毕标识 3. SwingWorker 在Andorid中使用AsyncTask
CopyOnWriteArrayList同一时候获得线程安全性、一致性以及良好的响应性。
2. 分解数据模型 假设一个数据模型必须被多个线程共享,并且因为堵塞、一致性或复杂度等原因无法实现一个线程安全的模型时。能够考虑使用分解模型设计。来源: http://www.bubuko.com/infodetail-2099169.html