Java同步问题,线程之间进行通信 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java同步问题,线程之间进行通信

2019-10-03 19:37:42 441 1

请看下面的代码。我知道为什么我不使用“同步”部分,循环永远不会中断,但是我不知道是为什么我使用“同步”部分,循环中断。似乎与之前发生的原则不符。

public class Test implements Runnable {

private String s = "continue";

@Override
public void run() {

    while (!"break".equals(this.s)) {
        //synchronized (this){
        //
        //}
    }

    System.out.println("loop has been breaked!");
}

public static void main(String[] args) throws InterruptedException {
    Test test = new Test();

    Thread t1 = new Thread(test);
    t1.start();

    TimeUnit.SECONDS.sleep(1);
    test.s = "break";
}

}

取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-10-09 16:04:06

    这不是偶然的情况,而是一个可见性问题。使svolatile也起作用,使值更改对线程可见,而不是使用缓存的值。

    从Java内存模型的POV看,使用同步方式是不正确的。test分配时,您还需要同步test.s = "break";。但是,由于底层的x86体系结构,您的同步代码有效,即使使用NOOP同步块,该体系结构也似乎刷新了缓存。

    0 0
相关问答

0

回答

请问java性能问题:如何优化向HashMap插入元素的速度?

2021-11-12 17:18:18 131浏览量 回答数 0

0

回答

请问java中使用BigDecimal计算操作性能最优的做法是什么?

2021-11-07 15:42:19 204浏览量 回答数 0

1

回答

java性能问题:有没有比较字符串是否相等的最快方法?

2021-11-06 16:21:40 161浏览量 回答数 1

0

回答

您好java性能问题:有没有比较字符串是否相等的最快方法?

2021-11-07 00:39:14 137浏览量 回答数 0

1

回答

java性能问题:如何优化向HashMap插入元素的速度?

2021-11-06 15:41:34 205浏览量 回答数 1

1

回答

java中常用的性能调优诊断工具都有哪些,请帮忙提供一下?

2021-11-06 10:24:39 150浏览量 回答数 1

0

回答

请问java中常用的性能调优诊断工具都有哪些,请帮忙提供一下?

2021-11-06 22:35:44 83浏览量 回答数 0

1

回答

java中使用BigDecimal计算操作性能最优的做法是什么?

2021-11-06 16:35:15 222浏览量 回答数 1

1

回答

java中DoubleBufferedQueue与ArrayBlockingQueue哪个性能更高?

2021-11-06 21:50:01 180浏览量 回答数 1

1

回答

java中ArrayBlockingQueue与DoubleBufferedQueue哪个性能更高?

2021-11-06 21:47:49 201浏览量 回答数 1
+关注
8
文章
487
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载