一般地, IntelliJ Platform 的数据结构都可以使用单个reader或writer锁。
任何线程都可以读取数据。在UI线程做读操作不需要任何代价。然而,在任何其它线程做读操作,都需要通过ApplicationManager.getApplication().runReadAction()
方法进行。
对数据的写操作只能在UI线程进行,且必须通过ApplicationManager.getApplication().runWriteAction()
方法.
从后台线程向事件分发线程传递控制信息,插件应该使用ApplicationManager.getApplication().invokeLater()
代替SwingUtilities.invokeLater()
。前者允许指定本次调用时的模态框状态,比如指定操作执行时模态框的堆栈应该在一个什么状态。传递ModalityState.NON_MODAL
表示操作会在所有模态框关闭后执行。传递ModalityState.stateForComponent()
表示操作会在某个指定的组件仍然可见时执行。
网友评论