我有两个CLASS(每个都有一个线程),我想创建一个队列之间共享的队列。所以一个类可以将一些字节写入队列,另一个类可以从队列中读取一些字节。我可以在Java中做'全局共享对象'吗?
我试过静态的,这里是我的代码:
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中可能吗?
任何帮助将不胜感激!
这2个线程不应该能够看到对方。理想情况下他们应该是独立的。 – fTTTTT
@fTTTTT以下是事情:只有在同一进程中的线程才能共享内存项目。如果你需要你的线程独立处理,你应该考虑使用数据库和/或JMS(Java消息传递) – ControlAltDel
所以这意味着,如果我想让这两个线程共享一个对象,无论它是什么,这2个线程应该至少在同一班上创建? – fTTTTT