美文网首页
一次多线程同步的讨论

一次多线程同步的讨论

作者: 一个追寻者的故事 | 来源:发表于2020-08-27 15:01 被阅读0次

写了一个关于多线程的一段测试代码:

public class MultiThreadTest {
    public static void main(String[] args) {
        Some som = new Some();
        Runnable run = () -> {
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            som.stop();
        };
        new Thread(run).start();
        som.doSome();
        System.out.println("end");
    }

    static class Some{
        private boolean isStop = false;  
        void doSome(){
            System.out.println("start");
            while (true){
                if(isStop){
                    break;
                }
            }
            System.out.println("done");
        }
        void stop(){
            isStop = true;
        }
    }
}

输出结果是什么呢?我预想的是:

start
done
end

可实际的情况是执行完 start之后,就会无限等待下去。

start

也就是说,在主线程执行的while循环一直在进行,在while中的 isStop并没有因为另一个线程的赋值而改变。

如果把它想成是一个简单的Java多线程同步的问题的话,就很好解决了。问题原因是:当子线程修改了共享变量的值以后,虽然写入到了主内存,但是主线程的工作内存并没有及时刷新,取到的值还是旧的,所以导致无限等待下去。解决方式就多种多样了 volatilesynchronized 都可以,比如:

private volatile boolean isStop = false;        // 保证多线程可见性

这样就可以稳定输出 start done end

当时并没有往多线程同步上去考虑,所以一直没找到问题。还是得多写多练啊

相关文章

  • 一次多线程同步的讨论

    写了一个关于多线程的一段测试代码: 输出结果是什么呢?我预想的是: 可实际的情况是执行完 start之后,就会无限...

  • java多线程学习小案例

    多线程的小练习 需求:实现一次修改一次输出 主要知识点:多线程,同步,等待和唤醒

  • 起底多线程同步锁(iOS)

    起底多线程同步锁(iOS) 起底多线程同步锁(iOS)

  • iOS多线程同步方案

    在上篇文章中已经讨论了iOS中多线程方案, 本文章主要记录多线程的同步方案、文件的多读单写操作. 先附上demo地...

  • iOS线程同步

    线程同步 提到多线程大家肯定会提到锁,其实真正应该说的是多线程同步,锁只是多线程同步的一部分。 多线程对于数据处理...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • iOS 多线程基础

    转自:iOS 多线程基础 - 简书 多线程同步和异步的区别?IOS中如何实现多线程的同步? 异步:可以同时执行多条...

  • python防遗忘复习练手之:多线程

    多线程 线程同步

  • Java:synchronized关键字引出的多种锁

    前言 Java 中的 synchronized关键字可以在多线程环境下用来作为线程安全的同步锁。本文不讨论 syn...

  • OpenMP多线程——Parallel for

    多线程——线程同步 数据竞争问题 线程互斥同步——critical 线程互斥同步——atmoic 线程互斥同步——...

网友评论

      本文标题:一次多线程同步的讨论

      本文链接:https://www.haomeiwen.com/subject/pvkcsktx.html