我正在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命令时,获取的锁将被释放。
与
案例: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,我使用的是生菜库。【同步RedisCluster连接】
正如我所知,要同时运行两个类,必须使用两个线程,所以在情况2中,它们是在相互跟随的情况下运行的,在情况2中你的代码也没有启动,你还需要函数调用。。