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;
      }
    }

  • 相关阅读:
    (十三)网络html查看器
    (十二)handler消息处理机制
    (十一)ANR产生原理
    (十)android 中数据存储与访问——使用SharedPreferences保存数据
    (九)android 中数据存储与访问——保存文件到手机内存
    (八)activity的生命周期
    (七)android 通知对话框,并且监听了返回键,当按下返回键也会创建一个对话框
    (六)采用HTML创建UI
    (五)使用代码创建UI
    (六)代码编写UI
  • 原文地址:https://www.cnblogs.com/cz305679760/p/5111988.html
Copyright © 2011-2022 走看看