gpt4 book ai didi

java - 我可以用 Java 做 'global Shared Object' 吗?

转载 作者:行者123 更新时间:2023-11-29 05:02:40 26 4
gpt4 key购买 nike

我有两个CLASS(每个都有一个线程),我想创建一个在它们之间共享的队列。因此,一个类可以将一些字节写入队列,而另一个可以从SAME 队列中读取。

我试过静态的,这是我的代码:

public class ShareQueueTest {
public static final BlockingQueue<byte[]> memshare= new ArrayBlockingQueue<>(1000);
public static void main(String[] args){
Thread a = new Thread(){public void run(){
for(;;){
try {
memshare.put(new byte[20]);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(memshare.size());
}
}};
a.start();
}
}

而另一个类是从这个队列中简单读取的。

public class ShareQueueTest2 {
public static void main(String[] args){
Thread a = new Thread(){public void run(){
for(;;){
System.out.println(ShareQueueTest.memshare.size());
}
}};
a.start();
}
}

我运行它。尽管一个线程将字节放入该队列,但另一个线程仍然说队列一直是空的。很明显,它们指的是不同的事物。

所有的事情都发生在本地机器上。

由于这个问题是从网络场景中简化而来的,所以出于某种原因,我不想让另一个类来操纵这两个线程,它们彼此是盲目的。也许他们彼此唯一了解的是每个线程都在同一台本地机器上运行,另外,他们知道对方的端口号。在这种情况下,我需要一些方法来创建一个他们都能“看到”的数据结构。

我也想到了用内存地址。就像一个类获取对象的内存地址,另一个类从该地址获取对象并将其转换为正确的数据结构。在 Java 中可以吗?

任何帮助将不胜感激!

最佳答案

因为你的两个类都有一个 main 方法,看起来你可能在不同的进程(JVM 实例)中运行这两个类

如果您从 ShareQueueTest.main 调用 ShareQueueTest2.main(...),它应该可以工作

关于java - 我可以用 Java 做 'global Shared Object' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31536843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com