身为JAVA工作者必须了解的实战知识(八)
博客专区 > 叶荷 的博客 > 博客详情
身为JAVA工作者必须了解的实战知识(八)
叶荷 发表于3个月前
身为JAVA工作者必须了解的实战知识(八)
  • 发表于 3个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

一、为什么GUI是单线程化

传统的GUI应用程序通常都是单线程的。

1. 在代码的各个位置都需要调用poll方法来获得输入事件(这种方式将给代码带来极大的混乱)

2. 通过一个“主事件循环(Main Event Loop)”来间接地执行应用程序的所有代码。

如果在主事件循环中调用的代码需要很长时间才能执行完成,那么用户界面就会“冻结”,直到代码执行完成。这是因为只有当执行控制权返回到主事件循环后,才能处理后续的用户界面事件。

很多尝试多线程的GUI框架的努力,最总都因为静态条件和死锁导致的稳定性问题,又回到单线程的时间队列模型的老路上。

1. 顺序事件处理

因为只有唯一的线程在处理GUI任务,所有任务都不需要考虑并发且都是顺序执行,但是问题是如果在任务中执行时间过长,或导致后续操作无法响应。(Android会提示Andorid Not Response异常)

2. Swing中的线程限制

GUI的单线程规则:组件与模型只能在事件分派线程中被创建、修改和请求。

在Andorid中如果在子线程进行创建或者更新UI操作会抛出异常。

二、短期的GUI任务

GUI应用程序中,事件起源于事件线程,冒泡似得传递到达应用程序提供的监听器,如果是比较简单的修改颜色等,可以直接在事件线程中处理。

三、耗时GUI任务

因为GUI任务有线程限制,所以需要子线程处理耗时操作,通常最后还需要在子线程进行刷新。

1. 取消

2. 进度与完成标识

3. SwingWorker

在Andorid中使用AsyncTask

四、共享数据模型

避免响应性的最简单的方式是初始化时一次性读取到内存中,这样需要考虑是否占用内存过多的问题。

1. 线程安全的数据模型

ConcurrentHashMap无法提供一致的数据快照。

CopyOnWriteArrayList同时获得线程安全性、一致性以及良好的响应性。

2. 分解数据模型

如果一个数据模型必须被多个线程共享,而且由于阻塞、一致性或复杂度等原因无法实现一个线程安全的模型时,可以考虑使用分解模型设计。

五、其他形式的单线程子系统

一些情况下无法避免同步或者死锁问题,例如:原生库(Native Library)要求、通过System.loadLibrary加载时,都必须放在同一个线程中执行。

将Future和newSingleThreadExecutor一起使用处理单线程可取消的任务。

以上就是我推荐给Java开发者们的一面试经典知识。但是这些知识里面并没有太多Java全栈、Java晋阶、JAVA架构之类的题,不是我不推荐,而是希望大家更多的从基本功做起,打好基础,太多复杂的内容一会儿也说不明白。

好了同学们,我能介绍的也都全部介绍完给你们了,如果下获得更多JAVA教学资源,可以选择来我们这里共同交流,群:240448376,很多大神在这里切磋学习,不懂可以直接问,晚上还有大牛免费直播教学。

注:加群要求

1、具有一定工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加,有些应届生和实习生也可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

PS:现在主要讲解的内容是(反射原理枚举原理与应用注解原理常用设计模式、正规表达式高级应用、JAVA操作Office原理详解JAVA图像处理技术,等多个知识点的详解和实战)

6.小号或者小白之类加群一律不给过,谢谢。

最后,每一位读到这里的网友,感谢你们能耐心地看完。觉得对你有帮助可以给个喜欢!希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步

共有 人打赏支持
粉丝 0
博文 24
码字总数 41519
×
叶荷
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: