小编hum*_*me1的帖子

无法理解Java规范中volatile的示例

我对volatileJava中的含义有了一般的了解.但阅读 Java SE规范8.3.1.4我在理解某个易变性示例下面的文本时遇到了问题.

class Test {
    static volatile int i = 0, j = 0;
    static void one() { i++; j++; }
    static void two() {
        System.out.println("i=" + i + " j=" + j);
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许方法1和方法2同时执行,但是保证对i和j的共享值的访问完全出现次数,并且以完全相同的顺序出现,因为它们似乎在每个执行程序文本期间发生线.因此,j的共享值永远不会大于i的共享值,因为对i的每个更新必须在更新为j之前反映在i的共享值中.但是,对于方法二的任何给定调用都可能会观察到j的值远远大于为i观察到的值,因为方法一可能在方法二获取i的值的时刻之间执行多次.方法二取值j的那一刻.

怎么

j永远不会超过我

,但同时

方法二的任何给定调用都可能观察到j的值远远大于为i观察到的值

??

看起来像矛盾.

ji运行示例程序后更大.为什么要用volatile呢?它没有volatile(也i可能比j规范中先前的一个例子更大)给出几乎相同的结果.为什么这个例子可以替代synchronized

java specifications volatile

10
推荐指数
2
解决办法
418
查看次数

git pull 后仍然落后于原点

我有一个克隆的存储库,现在由 X 提交落后于 origin。git pull看起来它工作正常,压缩,接收等。但是当我尝试git status之后git pull,我仍然落后的消息。这个问题的原因可能是什么?

这是之后的消息git status

On branch release/xxxx
Your branch is behind 'origin/release/xxxx' by 351 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
nothing to commit, working tree clean`
Run Code Online (Sandbox Code Playgroud)

git

3
推荐指数
1
解决办法
1730
查看次数

gdb在启动程序期间退出,代码为127

想要在Linux Debian中将gdb用作调试器。尝试运行二进制文件,我得到以下信息:

(gdb) r
Starting program: /usr/local/sbin/test 
/bin/bash: /usr/local/sbin/test: No such file or directory
During startup program exited with code 127.
(gdb) 
Run Code Online (Sandbox Code Playgroud)

我猜应该是基本的。但是我用谷歌搜索了很多,最常见的答案是

$ export SHELL=/bin/bash
Run Code Online (Sandbox Code Playgroud)

这没有帮助。我还尝试更改二进制执行的PATH,尝试从其他目录运行...仍然相同。

你能帮我吗?

c++ debugging debian gdb

2
推荐指数
1
解决办法
9652
查看次数

弹簧@Component@Autowired

我有一个带有自动扫描和 @Component 注释的 Spring 项目。某些组件需要使用@Autowired注入到不同的bean中。默认情况下它会与创建为单例的组件 bean 相同吗?如果是这样,我如何将同一组件的不同实例注入到不同的bean中?

PS 我知道它接近基础知识并且听起来很一般。只是想为自己说清楚。

提前致谢

java spring

2
推荐指数
1
解决办法
9854
查看次数

标签 统计

java ×2

c++ ×1

debian ×1

debugging ×1

gdb ×1

git ×1

specifications ×1

spring ×1

volatile ×1