gpt4 book ai didi

java - 在 Vaadin 7 中调用 VaadinSession getAttribute 时需要锁定

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:01 25 4
gpt4 key购买 nike

我知道在调用 setAttribute ( link ) 时是必须的,但是 getAttirbute 呢?

这是正确的吗?

public Object getMyAttribute() {
return VaadinSession.getCurrent().getAttribute("myAttribute");
}

还是需要加锁?

public Object getMyAttribute() {
try {
VaadinSession.getCurrent().getLockInstance().lock();
return VaadinSession.getCurrent().getAttribute("myAttribute");
} finally {
VaadinSession.getCurrent().getLockInstance().unlock();
}
}

最佳答案

添加到 the answer by Patton .虽然我不是这个主题的专家,但我在通读文档并阅读 this post 后发表了我的理解。罗兰克鲁格。

结果:模拟问题

虽然我不知道您问题的确切答案,但我相信这个问题没有实际意义。

让 Vaadin 7.1 及更高版本自动为您处理锁定。文档说自动锁定路由优于手动锁定。

主线程上没有问题

如果访问 VaadinSession从通常的主要 Vaadin 用户界面线程中,则不需要显式锁定。在主线程中工作时,Vaadin 会根据需要自动锁定 VaadinSession。

您应用的所有状态都存储在该 session 对象中,因此 Vaadin 会定期访问和保护该 session 。

其他话题

锁定仅在从后台线程访问 VaadinSession 时是一个问题,从您启动的线程。

即使在这种情况下,Vaadin 也提供了一对选项,如果您传递 Runnable,锁定会自动处理。这些“访问”方法之一:

如果您的代码仅影响 VaadinSession 而未触及任何 UI 对象(用户界面、布局、小部件组件等),则使用第一个 VaadinSession.access()。另一方面,如果您的代码影响任何 UI 对象并直接寻址 VaadinSession,请使用第二个 UI.access()

不需要手动锁定

因此,虽然您可以在访问 VaadinSession 期间管理锁定,但只有在后台线程中时才需要这样做并且出于某种原因您不想调用access 方法之一。但我想不出任何这样的理由。


更多讨论和groovy diagram我做了,看到这个类似的问题,how to put data in session variable and get the data in different page in vaadin? .

关于java - 在 Vaadin 7 中调用 VaadinSession getAttribute 时需要锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com