小编Mor*_*itz的帖子

Java:将所有字段设为final还是volatile?

如果我有一个在线程之间共享的对象,在我看来每个字段应该是final或者volatile,具有以下推理:

  • 如果应该更改字段(指向另一个对象,更新原始值),那么该字段应该是volatile所有其他线程对新值进行操作.仅仅访问所述字段的方法的同步是不够的,因为它们可能返回缓存的值.

  • 如果该领域永远不会改变,那就去做吧final.

但是,我找不到任何关于此的内容,所以我想知道这个逻辑是否有缺陷还是太明显?

当然编辑而不是易失性可能使用final AtomicReference或类似.

编辑,例如,请参阅get getter方法是Java中volatile的替代方法吗?

编辑以避免混淆:这个问题是关于缓存失效!如果两个线程对同一个对象进行操作,则可以缓存对象的字段(每个线程),如果它们未声明为volatile.如何保证缓存无效?

最后的编辑感谢@Peter Lawrey,他指出了JLS§17(Java内存模型).据我所知,它表明同步在操作之间建立了先发生关系,因此如果那些更新"发生在之前",则线程会看到来自另一个线程的更新,例如,如果非易失性字段的getter和setter是synchronized.

java multithreading final volatile

23
推荐指数
2
解决办法
2071
查看次数

Java:标签后允许的语句

我正在玩Java语法,所以这个问题纯粹来自于好奇心.这段代码:

http://www.google.com
Object val = 5 <- 4;
Run Code Online (Sandbox Code Playgroud)

没有编译,因为一个标签(http)"必须紧跟声明".以下两个变体可以编译:

http://www.google.com
{ Object val = 5 <- 4; }
Run Code Online (Sandbox Code Playgroud)

Object val;
http://www.google.com
val = 5 <- 4;
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都从声明切换到表达式.这让我想知道Java中究竟是什么"声明",但是文档 指出:

除了表达式语句之外,还有另外两种语句:声明语句和控制流语句.声明语句声明一个变量.

JLS只是说(标签),其

标识符被声明为直接包含的Statement的标签.

它没有说"表达式陈述".

我错过了什么,或者这只是一个不清楚/不正确的规范?

java syntax

18
推荐指数
1
解决办法
670
查看次数

带 Typescript 的 Vue3 路由器:缺少 RouteConfig

我从 @vue/cli 创建了一个新的 vue 项目$> vue create my-project,激活了 Typescript 选项和路由器选项,并使用$>vue add vue-next.

现在,$>npm run serve失败了

ERROR in /home/auser/dev/my-project/src/router/index.ts(1,10):
1:10 Module '"../../node_modules/vue-router/dist/vue-router"' has no exported member 'RouteConfig'.

  > 1 | import { RouteConfig, createRouter, createWebHistory } from 'vue-router';
      |          ^
    2 | import Home from '../views/Home.vue'
Run Code Online (Sandbox Code Playgroud)

整个文件并没有那么长,后面会用到RouteConfig:

ERROR in /home/auser/dev/my-project/src/router/index.ts(1,10):
1:10 Module '"../../node_modules/vue-router/dist/vue-router"' has no exported member 'RouteConfig'.

  > 1 | import { RouteConfig, createRouter, createWebHistory } from 'vue-router';
      |          ^
    2 | import Home …
Run Code Online (Sandbox Code Playgroud)

typescript vue.js vue-router vuejs3

7
推荐指数
2
解决办法
2万
查看次数

PWA 可以在关闭时安排通知吗?

我正在开发一个 TODO 列表 PWA,即使应用程序关闭,它也应该在每天上午 8:00 显示当天的任务(类似于闹钟)。

有没有办法通过 PWA 来实现这一目标?(主要针对Chrome/Android)

到目前为止,在我的服务人员中我已经(简化)


self.addEventListener("message", (event) => {
    // Workflow: The app sends a message that the timer should be set.
    const prom = new Promise((resolveIt) =>
      self.setTimeout(() => showAlarmAndResolve(resolveIt, event.data), '<timeout_in_ms>')
    );
    // tell the service worker to remain alive until promise is resolved
    event.waitUntil(prom); 
  }
});

async function showAlarmAndResolve(resolveIt, text) {
  const options = {
    body: text,
    tag: "todo-alert",
  };
  await self.registration.showNotification(
    "Your tasks for today",
    options
  );
  resolveIt();   // allow the …
Run Code Online (Sandbox Code Playgroud)

service-worker progressive-web-apps

6
推荐指数
1
解决办法
2000
查看次数

如何共享 Ipython 笔记本内核?

我有一些非常大的 IPython (1.0) 笔记本,我发现使用它们非常不方便。我想将大笔记本分成几个较小的笔记本,每个都涵盖我分析的特定部分。但是,笔记本需要共享数据和(不可选择的)对象。现在,我希望这些笔记本连接到同一个内核。我该怎么做呢?如何更改笔记本连接的内核?(以及如何自动执行此步骤的任何想法?)

我不想使用并行计算机制(这将是一个微不足道的解决方案),因为在我的情况下它会增加很多代码开销。

ipython ipython-notebook

5
推荐指数
1
解决办法
1433
查看次数