小编Kur*_*Lin的帖子

Java重新排序会影响System.currentTimeMillis()吗?

根据Java Memory Model,只要执行结构良好,指令就可以重新排序.

所以我想知道,以下代码是否可能产生以下输出?

[代码] [在同一个主题中]

long a = System.currentTimeMillis();
long b = System.currentTimeMillis();
long c = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)

[输出]

a == 10, b == 20, c == 15
Run Code Online (Sandbox Code Playgroud)

如果不可能,那么JVM /实现会做些什么来防止这种情况发生?

java java-memory-model order-of-execution

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

发生在Java内存模型中的关系之前

关于JLS ch17 线程和锁,它说"如果一个动作发生在另一个之前,那么第一个动作在第二个之前可见并且在第二个之前被命令"; 我想知道:

(1)说"之前订购"的真正含义是什么?因为即使action_a发生在action_b之前,action_a也可以在action_b之后的某些实现中执行,对吧?

(2)如果action_a发生在action_b之前,是否意味着action_a绝不能看到action_b?或者action_a可能会看到或看不到action_b?

(3)如果action_a没有发生 - 在action_b之前,而action_b没有发生 - 在action_a之前,是否意味着action_a可能会看到或看不到action_b?

(4)之前没有任何循环发生,对吧?

任何答案将不胜感激:)

java jvm jvm-hotspot java-memory-model happens-before

6
推荐指数
2
解决办法
616
查看次数

为什么这个Java程序导致UDP数据包丢失?

我正在我的机器A和B上运行实验,两者都安装了Ubuntu Server 11.04.A和B连接到相同的1000M/bps开关.

A是发件人:

while(total <= 10,000)send_udp_datagramPacket(新字节[100])到B

B是接收者:

while(true)receive()

但最后我在B的收入不到10,000(约合9960).为什么会这样?丢失的数据包在哪里?他们实际上没有被送到开关的电线吗?或者开关丢失了?或者他们确实到了B,但B的操作系统丢弃了它们?或者他们到达了Java,但是Java因为一个完整的缓冲区而把它们扔掉了?

任何回复将不胜感激.

java ubuntu networking operating-system udp

0
推荐指数
1
解决办法
1119
查看次数