Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行两个线程和运行两个调用相同函数的类之间的区别_Java_Redis_Lettuce - Fatal编程技术网

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

Java 运行两个线程和运行两个调用相同函数的类之间的区别,java,redis,lettuce,Java,Redis,Lettuce,我正在探索Redis Steram[XREAD和XADD]上的阻塞读取命令。使用XREAD,我们可以获取在执行XADD时释放的多客户端阻塞读取 我观察到以下两种不同的行为: 案例:1 public static void main(String[] args){ Runnable t1 = new Runnable(){ public void run(){ function_to_read_block();

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

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

案例: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命令时,将释放获取的锁

vs

案例: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中期望的理想行为]

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


对于redis,我使用的是莴苣库。[Synchronous RedisCluster Connection]

正如我所知,要同时运行2个类,必须使用2个线程,
因此,在案例2中,它们是相互跟踪运行的,而且案例2中的代码没有启动,您还需要函数调用。

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