zoukankan      html  css  js  c++  java
  • 线程安全问题例子

    面试题总是会问写一个线程安全问题的例子,最简单的就是多线程操作同一个成员变量,而且方法没有加锁;如下:

    • 解决方法可以是写一个safeMethod方法,然后直接使用synchronized 关键字,
    • 也可以使用AtomicInteger ,直接使用incrementAndGet方法.基于cas操作的进行增加也是线程安全的
    
    import java.util.concurrent.CompletableFuture;
    import java.util.concurrent.CountDownLatch;
    
    /**
     * @author <a href="mailto:15268179013@139.com">yida</a>
     * @Version 2020-04-22 14:30
     * @Version 1.0
     * @Description ThreadUnSafeDemo
     */
    public class ThreadUnSafeDemo {
    
      //    private AtomicInteger value = new AtomicInteger(1);
      private static int value = 1;
    
      public static void main(String[] args) throws InterruptedException {
    
        CountDownLatch latch = new CountDownLatch(1);
    
        for (int i = 0; i < 5; i++) {
          CompletableFuture.runAsync(() -> {
            while (true) {
              System.out.println("正在出票" + (value++) + "");
    //            safeMethod();
              if (value > 80) {
                latch.countDown();
              }
              try {
                Thread.sleep(1000);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }
          });
        }
        latch.await();
        System.out.println("执行完毕...");
      }
    
      public synchronized static void safeMethod() {
        System.out.println("正在出票" + (value++) + "");
      }
    
    }
    
    
    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    Elasticsearch7.8快照备份到阿里云存储(OSS)
    office启动时不要显示首页
    Tinker Flutter热修复
    wordpress获取最新文章列表
    Nginx下完美解决WordPress的伪静态
    freenom申请域名
    新版DigitalOcean注册及使用中文教程
    CentOs安装宝塔
    利用 Github Actions 自动更新 docfx 文档
    行为型设计模式总结
  • 原文地址:https://www.cnblogs.com/javayida/p/13346745.html
Copyright © 2011-2022 走看看