gpt4 book ai didi

java - 为什么 THREAD-1 和 THREAD-2 不交错?

转载 作者:行者123 更新时间:2023-11-30 07:17:27 25 4
gpt4 key购买 nike

    public class Mutex {

private int val;
public Mutex(int val) {

this.val=val;
}

public int getVal() {
return val;
}

public void printVal()
{
int i=0;
while (true)
{

System.out.println(Thread.currentThread().getName()+" "+this.getVal());
if(i==50)
break;
else
i++;
}
}

public static void main(String args[])
{
final Mutex m1=new Mutex(1);
final Mutex m2 = new Mutex(2);
new Thread(new Runnable()
{
@Override
public void run() {

m1.printVal();

}
},"THREAD-1").start();
new Thread(new Runnable()
{
@Override
public void run() {

m2.printVal();

}
},"THREAD-2").start();
}


}

当“val”的类型为“int”时,THREAD-1 和 THREAD-2 不会交错,而如果我将其类型更改为 double,则线程会交错。我知道原语是线程安全的(long 和 double 除外)。考虑到上述代码示例,这究竟是如何工作的?

最佳答案

尝试将 50 增加到 1000000,也许然后他们会吗?
线程 1 在其时隙结束之前完成执行,因此没有上下文切换。

或者,...,如果您在每次迭代中都添加一个 Thread.sleep,您可能会发现它们会交错。

关于java - 为什么 THREAD-1 和 THREAD-2 不交错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16167287/

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