Question sur les threads et bytebuffers
Bonjour à tous,
D'après ce que j'ai compris sur les thread,ce qu'ils permettent de faire le multitâche donc du coup pour moi pour q'un thread puisse fonctionner il doit en exister d'autres afin qu'il ait communication.Mais ce que je n'arrive pas à comprendre ce que ce code fonctionne pourtant il n'y a qu'un thread(listener) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
public static void main(String[] args) throws IOException, InterruptedException {
private final BlockingQueue<ByteBuffer> queue = new ArrayBlockingQueue<ByteBuffer>(1);
private DatagramChannel dc;
dc=DatagramChannel.open();
dc.bind(null);
private final Thread listener = new Thread(() -> {
ByteBuffer bufferReceive = ByteBuffer.allocate(BUFFER_SIZE);
while (!Thread.interrupted()) {
try {
bufferReceive.clear();
receive(bufferReceive);
/*svp pourquoi si je fais
*bufferReceive.flip();
*queue.put(bufferReceive);
*ça ne marche pas?j'ai une erreur de type ByteBufferUnderFlowException.
*/
queue.put(bufferReceive.duplicate());//et ici quelqu'un peut m'expliquer svp pourquoi ça marche avec duplicate()? et quel est l'intérêt?
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
listener.start();
ByteBuffer bufferToSend = createPacket(requestNumber, s, cs);
bufferToSend.flip();
send(bufferToSend);
ByteBuffer bufferResponse = ByteBuffer.allocate(BUFFER_SIZE);
bufferResponse = queue.poll(TIMEOUT, TimeUnit.MILLISECONDS);
} |
De plus j'aimerai savoir la différence entre les 2 méthodes ci-dessous de sleep d'un thread :
Code:
1 2 3 4 5 6 7 8 9
|
Thread ts = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted()) {
Thread.sleep(TIMEOUT);
}
});
ts.sleep(TIMEOUT); |
Merci d'avance!!!