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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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!!!