Java 运行两个线程和运行两个调用相同函数的类之间的区别
我正在探索Redis Steram[XREAD和XADD]上的阻塞读取命令。使用XREAD,我们可以获取在执行XADD时释放的多客户端阻塞读取 我观察到以下两种不同的行为: 案例:1Java 运行两个线程和运行两个调用相同函数的类之间的区别,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();
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中,您基本上启动了两个独立的应用程序。因此,两者都有不同的应用程序上下文/堆栈。因此,由于这两个应用程序是两个独立的应用程序,它们永远不会相互了解,也永远不会阻止同步运行。