我浏览了有关NBP的书籍/文档,但是没有直接谈论NBP中的多线程编程.关于NBP中的多线程,有什么需要特别注意的地方吗?因此,如果我想创建一个多线程NBP应用程序,我只需要遵循常规的Java多线程编程实践,对吗?
解决方法:
要查看的主要内容是RequestProcessor和RequestProcessor.Task. RequestProcessor是一个线程池; RequestProcessor.Task是一项工作.
RequestProcessor所做的大部分工作与现在在JDK中执行的ExecutorService相似.仅使用JDK并不容易做到的主要事情是创建可以重新计划并重复运行的任务.例如,如果您想在用户停止键入超时后执行一些工作,这将非常有用:
private static final RequestProcessor rp = new RequestProcessor(MyClass.class);
private RequestProcessor.Task task = rp.create(new Runnable() {
public void run() {
//...do some expensive parsing or similar
}
});
public void keyPressed (KeyEvent ke) {
task.schedule(200); // (re)schedule the task 200ms in the future; if schedule() is called again, it will be postponed
}
如果您使用的是Nodes API,则它是线程安全的,您可以根据需要更新节点.
如果您做的事情涉及到Swing组件,请记住始终使用EventQueue.invokeLater(Runnable)运行该代码-切勿使用EventQueue.invokeAndWait()-这是解决死锁的秘诀.
如果您有可能有时在事件线程上调用的代码,有时却没有,则NetBeans提供了一种确保您的代码在事件线程上运行的简单方法:Mutex.EVENT.readAccess(新的Mutex.Action(){…})