Я использую простой вызов метода для выполнения методов в других классах.
Когда я использую это в сочетании с двумя потоками и BlockingQueue, я спрашивал себя, какой поток и когда выполняются эти вызовы.
Я сделал пример псевдокода, который не очень полезен, но описывает случай:
Поток A
public class ThreadA extends Thread {
private static final String TAG = "ThreadA";
@Override
public void run() {
ThreadB threadB = new ThreadB();
threadB.start();
InputStream InPut = null;//Imagen this inputStream results out of any kind
//of connection (Bluetooth,...)
byte[] buffer = new byte[1024];
while (true){
try {
InPut.read(buffer);
threadB.send(buffer+"");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Поток B
public class ThreadB extends Thread {
private static final String TAG = "ThreadB";
private BlockingQueue<String> queue = new LinkedBlockingQueue<>();
@Override
public void run() {
while (true){
String st ="";
try {
st = queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.d(TAG, "String is: " + st);
}
}
public void send(String a) {
queue.add(a);
}
}
Сценарий:Когда поток B заблокирован в .take()
, но метод вызывается, как это работает?
Мой вопрос вытекает из наблюдения, что входной поток в потоке A считывает неверные данные, когда я его использую.