【zk开发】理解zk事件处理线程

 

什么是事件处理线程(EventProcessingThread): 在启用事件处理线程时,zk的事件都是在单独的线程中处理的。 例如用户点击了一个已被监听的按钮 , 那么这个按钮的点击事件将被回传到服务器端,在事件处理阶段, zk会为该事件创建一个线程,单独 处理该事件,该线程即为事件处理线程( EventProcessingThread的实现类),如果开发者监听 了该事件,那么在该事件处理线程中(即同一线程内), 开发者监听器将被自动调用。

 

Messagebox.show()对话框的暂停功能如何实现的:

 

在启用事件处理线程时,一个注册程序,如果用户未输入用户名或密码, 调用Messagebox.show()提示用户, 代码暂停执行,当客户点击确定按钮时,代码从Messagebox.show()处继续执行。该功能是怎样实现的呢 ?从上面的事件处理线程的介绍中我们知道, 事件处理线程和开发者的事件监听器(如window实现类中的onXxx,

Composer中的onXxx, 或addEventListener注册的监听器、或者页面中组件的事件处理等等) 其实是同一线程,

在Messagebox.show()的方法内有这样一个方法Executions.wait(_mutex),该方法的功能即暂停当前事件处理线程 。当客户端点击弹出窗口上的按钮时,客户端发送该事件请求,服务器事件处理阶段,创建一个新的线程并查找

弹出窗口时的事件处理线程 ,并notify激活该线程, 然后代码会从Messagebox.show()出继续执行 从上面的介绍我们了解到,在启用事件处理线程时,所有的事件都是在事件处理线程中处理的,zk为每个事件创建崭新的线程进行处理, 当有大量用户大量的事件请求时,这将是一个不小的数目!线程之前的切换占用了大多cpu时间,并且线程本身占用很多的内存,

严重影响性能。 因此,从zk5.0以后,zk添加了禁用事件处理线程的功能,禁用事件处理线程时,所有的事件都将在

servlet线程中被处理,性能明显提高

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值