当前位置: 首页 > news >正文

创研科技做网站怎么样WordPress报错关闭

创研科技做网站怎么样,WordPress报错关闭,网络的结构,阿里巴巴怎么优化关键词排名zk ui介绍 在第1部分中#xff0c;我展示了如何在ZK应用程序中使用服务器推送和线程来执行后台任务。 但是#xff0c;这个简单的示例具有一个重大缺陷#xff0c;这使其对于实际应用程序而言是一种不好的方法#xff1a;它为每个后台任务启动了一个新线程。 JDK5引入了E… zk ui 介绍 在第1部分中我展示了如何在ZK应用程序中使用服务器推送和线程来执行后台任务。 但是这个简单的示例具有一个重大缺陷这使其对于实际应用程序而言是一种不好的方法它为每个后台任务启动了一个新线程。 JDK5引入了ExecutorService类该类抽象了线程详细信息并为我们提供了一个不错的接口可用于提交任务以进行后台处理。 在这篇博客文章中我将介绍创建ZK应用程序的最重要部分该应用程序包含一个采用字符串并以大写形式返回的后台任务。 完整的示例项目可在Github上找到 https://github.com/Gekkio/blog/tree/master/2012/10/async-zk-part-2 1.创建一个ExecutorService实例 首先我们需要一个可以在ZK代码中使用的ExecutorService。 在大多数情况下我们需要一个共享的单例实例该实例可以通过依赖项注入例如Spring进行配置和管理。 确保只创建一次ExecutorService并且使用应用程序将其正确关闭是非常重要的。 在这个示例项目中我将使用一个简单的holder类该类管理单个静态可用的ExecutorService实例的生命周期。 该持有人必须在zk.xml中配置为侦听器 。 package sample;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;import org.zkoss.zk.ui.WebApp; import org.zkoss.zk.ui.util.WebAppCleanup; import org.zkoss.zk.ui.util.WebAppInit;public class SampleExecutorHolder implements WebAppInit, WebAppCleanup {private static volatile ExecutorService executor;public static ExecutorService getExecutor() {return executor;}Overridepublic void cleanup(WebApp wapp) throws Exception {if (executor ! null) {executor.shutdown();System.out.println(ExecutorService shut down);}}Overridepublic void init(WebApp wapp) throws Exception {executor Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());System.out.println(Initialized an ExecutorService);}} 请注意线程池是根据系统中的处理器使用固定大小配置的。 正确的线程池大小调整非常重要取决于您要执行的任务类型。 最大线程数也是同时进行的并发任务的最大数量 2.编写事件类以对后台任务的结果进行建模 我们将使用ZK服务器推送将任务结果传达回UI因此必须将结果建模为ZK事件。 创建自定义Event的子类而不是将结果添加到data参数中始终是一个好主意因为自定义类更加类型安全并且可以支持多个字段。 第一个事件类表示任务仍在运行时发送的状态更新。 在此示例中它将包含输入字符串中的字符数。 package sample;import org.zkoss.zk.ui.event.Event;public class FirstStepEvent extends Event {public final int amountOfCharacters;public FirstStepEvent(int amountOfCharacters) {super(onFirstStepCompleted, null);this.amountOfCharacters amountOfCharacters;}} 第二个事件类表示完全完成的任务。 在此示例中它包含大写的输入字符串。 package sample;import org.zkoss.zk.ui.event.Event;public class SecondStepEvent extends Event {public final String upperCaseResult;public SecondStepEvent(String upperCaseResult) {super(onSecondStepCompleted, null);this.upperCaseResult upperCaseResult;}} 3.编写任务类 任务类应具有以下特征 它实现了Runnable 它以所有必需的输入数据作为构造函数参数如果可能数据应该是不可变的。 此输入数据必须是线程安全的并且通常不应包含任何与ZK相关的内容没有组件会话等。 例如如果要使用文本框值作为输入请事先读取该值 不要将文本框本身作为参数传递 。 它需要一个Desktop以及至少一个EventListener作为构造函数参数。 它们是将结果发送回UI所必需的 在此示例中唯一的输入数据是将用于计算任务结果的字符串。 package sample;import java.util.Locale;import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.DesktopUnavailableException; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener;public class SampleTask implements Runnable {private final String input;private final Desktop desktop;private final EventListenerEvent eventListener;SuppressWarnings({ rawtypes, unchecked })public SampleTask(String input, Desktop desktop, EventListener eventListener) {this.input input;this.desktop desktop;this.eventListener eventListener;}Overridepublic void run() {try {// Step 1Thread.sleep(10000);Executions.schedule(desktop, eventListener, new FirstStepEvent(input.length()));// Step 2Thread.sleep(10000);Executions.schedule(desktop, eventListener, new SecondStepEvent(input.toUpperCase(Locale.ENGLISH)));} catch (DesktopUnavailableException e) {System.err.println(Desktop is no longer available: desktop);} catch (InterruptedException e) {}}} 注意所有构造函数参数如何存储在私有的final字段中以及输入数据如何不可变在Java中字符串是不可变的。 该任务通过使用Thread.sleep模拟长时间运行的处理并在“处理”完成一半时提交状态事件。 4.在ZK作曲家中安排任务 在作曲家中使用任务非常简单。 您只需要启用服务器推送并将新的任务实例提交给执行者。 一旦有可用的后台线程可用它将自动启动任务。 desktop.enableServerPush(true); // Get the executor from somewhere executor SampleExecutorHolder.getExecutor(); executor.execute(new SampleTask(input.getValue(), desktop, this)); 在此示例中作曲家扩展了GenericForwardComposer该类实现了EventListener因此它本身可以处理产生的任务事件。 这两个事件均由使用状态信息更新UI的方法处理。 public void onFirstStepCompleted(FirstStepEvent event) {status.setValue(Task running: event.amountOfCharacters characters in input); }public void onSecondStepCompleted(SecondStepEvent event) {status.setValue(Task finished: event.upperCaseResult); } 最后的话 使用此技术为ZK应用程序中的长期运行的任务添加强大的支持非常容易。 ZK编写器中的结果代码非常简单因为结果是使用典型的Event / EventListener范例传递的该范例在ZK应用程序中非常常见。 这种技术的最大危险是线程安全错误这些错误很难调试。 完全了解执行每段代码的线程并确保所有共享状态是完全线程安全的这至关重要。 只要后台任务本身不访问其他非线程安全资源使用不可变的输入数据和不可变的输出事件通常就足以确保安全。 一些常见的错误是 在后台任务中调用线程本地相关的库方法例如任何看起来神奇地获得某种“当前”值的方法。 后台线程不会自动包含与servlet线程相同的线程本地值因此默认情况下所有这些方法都将失败。 例如ZK中的Sessions.getCurrentExecutions.getCurrent和许多Spring Security静态方法。 将非线程安全参数传递给后台任务。 例如传递一个可变的列表该可变的列表可能会在任务运行时由编写者修改总是制作可变集合的副本。 在事件中传递非线程安全的结果数据。 例如在结果事件中传递列表而稍后将在任务中修改列表始终创建可变集合的副本。 在桌面中访问非线程安全的方法。 即使您可以在后台任务中访问桌面大多数桌面方法也不是线程安全的。 例如不能保证调用desktop.isAlive正确返回状态至少在ZK 6.5中该方法依赖于非易失性字段因此不能保证在后台线程中可见写入 参考 Advanced ZK异步UI更新和后台处理– Jawsy Solutions技术博客博客上的JCG合作伙伴 Joonas Javanainen的第二部分 。 翻译自: https://www.javacodegeeks.com/2012/10/advanced-zk-asynchronous-ui-updates-and-background-processing-part-2.htmlzk ui
http://www.yutouwan.com/news/272935/

相关文章:

  • 网站建设公司发展前景分栏型网站
  • 北京新机场建设指挥部网站惠州小程序推广
  • 河南浪博网站开发dede网站版权信息标签
  • 代制作网站wordpress++群晖
  • 网站设计培训学校有哪些百度技术培训中心
  • 网站制作流程分为哪三步广东地区建网站的公司
  • 西安网站建设的费用代理网名大全
  • 深圳网站建设服务器公司ml免费域名注册
  • win7用本地文件做网站模板黑彩网站建设运营
  • 百度云建网站做视频网站需要什么架构
  • 网站开发兴趣组网站上的代码网页怎么做的
  • php网站开发实例教程 课件做网站域名怎么选有利于seo
  • 跨境电商 网站开发徐州建设局网站
  • 万由nas做网站织梦搬家 网站空白
  • 网站运营外包方案咕果网给企业做网站的
  • 可以做链接的网站wordpress 3.7 xss
  • 建设银行 钓鱼网站韩国男女直接做的视频网站
  • 溧阳网站建设中心wordpress 页面与文章
  • 如何查看网站是不是wordpress加强图书馆网站建设
  • 东莞公司官网建站网站建设 字体版权
  • 做设计有哪些好用的素材网站旅游网站项目评估
  • 深圳网站建设公司哪家什么网站专门学做湖北菜
  • 苏州企业网站建设开发与制作太原这边有做网站的吗
  • 创建好网站如何把浏览17zwd一起做网站普宁
  • 高邮市建设局网站株洲县建设局官方网站
  • 帮别人做网站建站公司最喜欢的网站
  • 周口网站建设73data管理系统中计算机应用实践考试
  • 中煤建设集团网站营销型网站建设推荐
  • wordpress 安装502杭州seo代理公司
  • 友情链接的网站阿里云虚拟主机做企业网站