我对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观察到的值
??
看起来像矛盾.
我j比i运行示例程序后更大.为什么要用volatile呢?它没有volatile(也i可能比j规范中先前的一个例子更大)给出几乎相同的结果.为什么这个例子可以替代synchronized?
我有一个克隆的存储库,现在由 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) 想要在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,尝试从其他目录运行...仍然相同。
你能帮我吗?
我有一个带有自动扫描和 @Component 注释的 Spring 项目。某些组件需要使用@Autowired注入到不同的bean中。默认情况下它会与创建为单例的组件 bean 相同吗?如果是这样,我如何将同一组件的不同实例注入到不同的bean中?
PS 我知道它接近基础知识并且听起来很一般。只是想为自己说清楚。
提前致谢