Kra*_*ayo 3 java multithreading vaadin vaadin7
我知道调用setAttribute(link)时有必要,但getAttirbute呢?
它是否正确?
public Object getMyAttribute() {
return VaadinSession.getCurrent().getAttribute("myAttribute");
}
Run Code Online (Sandbox Code Playgroud)
还是需要锁定?
public Object getMyAttribute() {
try {
VaadinSession.getCurrent().getLockInstance().lock();
return VaadinSession.getCurrent().getAttribute("myAttribute");
} finally {
VaadinSession.getCurrent().getLockInstance().unlock();
}
}
Run Code Online (Sandbox Code Playgroud)
添加到Patton的答案.虽然我不是这方面的专家,但是在仔细阅读文档并阅读RolandKrüger的这篇文章后,我发表了我的理解.
虽然我不知道你问题的确切答案,但我认为这个问题没有实际意义.
➡ 让Vaadin 7.1及更高版本自动处理锁定.该文档称自动锁定路径优于手动锁定.
如果VaadinSession
在通常的主要Vaadin用户界面线程中访问from,则不需要显式锁定.在主线程中工作时,Vaadin会根据需要自动锁定VaadinSession.
您的所有应用程序状态都存储在该会话对象中,因此Vaadin会定期访问和保护该会话.
如果从后台线程从您启动的线程访问VaadinSession,则锁定只是一个问题.
即使在这种情况下,Vaadin提供了一对选项,如果您将Runnable传递给这些"访问"方法中的任何一个,则会自动处理锁定:
access
VaadinSession
对象的方法access
UI
对象的方法如果您的代码仅影响VaadinSession而不触及任何UI
对象(用户界面,布局,窗口小部件组件等),那么请使用第一个,VaadinSession.access()
.另一方面,如果您的代码影响任何UI对象以及直接寻址VaadinSession,请使用第二个,UI.access()
.
因此,虽然您可以在访问VaadinSession期间管理锁定,但只有在后台线程中并且出于某种原因您不想调用任何access
一种方法时才需要这样做.但我无法想象任何这样的理由.
有关我所做的更多讨论和详细图表,请参阅此类似问题,如何将数据放入会话变量并在vaadin中的不同页面中获取数据?.
归档时间: |
|
查看次数: |
2591 次 |
最近记录: |