У меня есть два КЛАСС (у каждого есть поток), и я хочу создать очередь, разделяемую между ними. Таким образом, один класс может записать несколько байтов в очередь, а другой может читать из очереди SAME.Могу ли я сделать глобальный общий объект в 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 Messaging) – ControlAltDel
Так что это означает, что если я хочу, чтобы эти 2 потока совместно использовали объект, что бы это ни было, эти 2 потока должны быть НА МЕНЬШЕМ, созданном, в том же классе? – fTTTTT