zoukankan      html  css  js  c++  java
  • 线程互斥(互斥变量)

    下面代码模拟一个场景:

    A使用线程调用B来处理东西,但是B处理的时候需要一个Map,map内容需要从数据库查

    而这个map会因其他模块修改数据库不断的变化。

    为了保证处理的正确性,需要线程定时更新map,

    更新map时需要A停止线程,等B更新好map再开始。

    下面代码map并未出现,

    replace()方法代表更新map

    handle()代码处理

    B中ready作为互斥变量

    import java.util.Timer;

    import java.util.TimerTask;

    /**
    * 线程互斥
    * @author zhuo
    *
    */
    public class MutualExclusionVariable {
      public static void main(String[] args) {
        A a = new A();
        Timer timer1 = new Timer();
        timer1.schedule(a.task, 0, 100);
        Timer timer2 = new Timer();
        timer2.schedule(a.b.task, 0, 10000);
      }

    }

    class A{
      B b = new B();
      int i = 1;
      TimerTask task = new TimerTask() {
        @Override
        public void run() {
          sendMessage();
        }
      };
      public void sendMessage() {
        synchronized (b.isReady()) {
          b.handle(String.valueOf(i++));
        }
      }
    }

    class B {
      String ready = "";
      TimerTask task = new TimerTask() {
        @Override
        public void run() {
          try {
            replace();
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      };

      public void handle(String str) {
        System.out.println(str);
      }

      public void replace() throws InterruptedException {
        synchronized (ready) {
          System.out.println("替换中.....");
          for (int i = 0; i < 100000; i++) {
            for (int j = 0; j < 100000; j++) {
              for (int k = 0; k < 1000000; k++) {

              }
            }
          }
          System.out.println("替换完成");
        }
      }

      public String isReady(){
        return ready;
      }
    }

  • 相关阅读:
    Linux下如何查看版本信息
    SUSE12Sp3安装配置.net core 生产环境(2)-安装.NET Core 2.2.1 runtime 并运行.NET代码
    NET CORE Learning
    JWT(JSON Web Token)原理简介
    定性分析与定量分析的异同及优缺点
    《React16免费基础视频教程》【2】
    《React16免费基础视频教程》【1】
    《狂神说-JUC》【3】
    《狂神说-JUC》【2】
    《狂神说-JUC》【1】
  • 原文地址:https://www.cnblogs.com/cz305679760/p/5111988.html
Copyright © 2011-2022 走看看