如何解决运行 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 举报,一经查实,本站将立刻删除。