微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行 2 个线程和运行 2 个调用相同函数的类之间的区别

如何解决运行 2 个线程和运行 2 个调用相同函数的类之间的区别

我正在探索在 Redis Steram [XREAD 和 XADD] 上阻止读取命令。使用 XREAD 我们可以获取多客户端阻塞读取,该读取在执行 XADD 时被释放。 This

我观察到以下两种不同的行为:

案例:1

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner Sc = new Scanner(system.in);
    int mo,i,j,a;
    System.out.println(" how many modules you have in this semester ?");
    mo = Sc.nextInt();
    // creat the Array
    int[] tab = new int[mo];
    for (a = 0; a < mo; a++) {
      System.out.println(" Enter the module name : " + (a + 1));
      tab[a] = Sc.nextInt();
    }
    int[][] list = new int[2][mo];
    for (i = 0; i < 2; i++) {
      for (j = 0; j < mo; j++) {
        System.out.println(" Enter the marks of the " +
          (i + 1) + " Assignment : " + (i + 1) + "," + j);
        list[i][j] = Sc.nextInt();
      }
    }
  }
}

在这种情况下,在 redis-cli 上执行 2 个 XADD 命令时会释放获取的锁。

对比

案例:2

public static void main(String[] args){

        Runnable t1 = new Runnable(){
            public void run(){
                function_to_read_block();
            }
        };
        Runnable t2 = new Runnable(){
            public void run(){
                function_to_read_block();
            }
        };
       new Thread(t1).start();
       new Thread(t2).start();
}

同时运行两个类,1 XADD 命令同时释放两个读锁。 [这也是我期望从案例 1 中得到的理想行为]

有人可以解释为什么这两种情况有区别吗?运行 2 个线程与运行 2 个独立的类同时调用一个函数有何不同??

对于 redis,我使用的是 lettuce 库。 【同步RedisCluster连接】

解决方法

据我所知,同时运行 2 个类,您必须使用 2 个线程, 因此,在第 2 种情况下,它们正在相互运行,您在第 2 种情况下的代码也未启动,您还需要调用函数..

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。