欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

如何正确的使用Java事件通知(1)(4)

来源: javaer 分享于  点击 6614 次 点评:287

异常处理

本文的最后介绍了如何处理抛出 RuntimeExceptions 的那些损坏的监听器。尽管我总是严格对待 fail-fast 错误机制,但在这种情况下让这个异常得不到处理是不合适的。尤其考虑到这种实现经常在一些多线程环境里被用到。

损坏的监听器会有两种方式来破坏系统:第一,它会阻止通知向观察者的传达过程;第二,它会伤害那些没有准备处理好这类问题的调用线程。总而言之它能够导致多种莫名其妙的故障,并且有的还难以追溯其原因,

因此,把每一个通知区域用一个 try-catch 块来保护起来会显得比较有用。

  1. private void broadcast( StateEvent stateEvent ) { 
  2.  
  3. listeners.forEach( listener -> notifySafely( stateEvent, listener ) ); 
  4.  
  5.  
  6. private void notifySafely( StateEvent stateEvent, StateListener listener ) { 
  7.  
  8. try { 
  9.  
  10. listener.stateChanged( stateEvent ); 
  11.  
  12. catch( RuntimeException unexpected ) { 
  13.  
  14. // appropriate exception handling goes here... 
  15.  
  16.  

总结

综上所述,Java 的事件通知里面有一些基本要点你还是必须得记住的。在事件通知过程中,要确保在监听器集合的快照里做迭代,保证事件通知在同步块之外,并且在合适的时候再安全地通知监听器。

但愿我写的这些让你觉得通俗易懂,最起码尤其在并发这一节不要再被搞得一头雾水。如果你发现了文章中的错误或者有其它的点子想分享,尽管在文章下面的评论里告诉我吧。




相关栏目:

用户点评