【问题标题】:Difference between running 2 threads and running 2 classes calling same function运行 2 个线程和运行 2 个调用相同函数的类之间的区别
【发布时间】:2021-08-01 03:25:00
【问题描述】:

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

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

案例:1

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

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

案例:2

public class ClassA {
     
     public static void main(String[] args){
          function_to_read_block()
     }
}

public class ClassB {
     
     public static void main(String[] args){
          function_to_read_block()
     }
}

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

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

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

【问题讨论】:

  • 不知道 xadd 或 xread 但在情况 2 中,您基本上是在启动两个单独的应用程序。所以两者都有不同的应用程序上下文/堆栈。因此,由于这两个是两个独立的应用程序,它们永远不会相互了解,也不会阻塞,即同时运行。

标签: java redis lettuce


【解决方案1】:

据我所知,要同时运行 2 个类,您必须使用 2 个线程, 所以在案例 2 中,它们相互跟踪运行,在案例 2 中你的代码也没有启动,你还需要函数调用..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 2010-10-20
    • 2021-08-21
    • 2011-02-26
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多