وجدت هذا المثال يشرح ConcurrentLinkedQueue
ولدي كم سؤال في المثال اود توضيحه
*/
public class Producer implements Runnable {
private static int ctr;
private final Queue<Message> messageQueue;
private final Random r;
public Producer(Queue<Message> messageQueue) {
this.messageQueue = messageQueue;
r = new Random();
}
@Override
public void run() {
while (true) {
produce();
int wait = r.nextInt(5000);
try {
Thread.sleep(wait);
} catch (InterruptedException ex) {
Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}لماذا وضع synchronized داخل method لكي لا يمنع method كامله .. صحيح؟
private void produce() {
Message m = new Message(++ctr, "Example message.");
messageQueue.offer(m);
synchronized (messageQueue) {
messageQueue.notifyAll();
}
System.out.println("Producer: " + m);
}طيب السطر التالي سوف يكون فيه damaged لأن يسمح لthread اخر بتغير القيمه صحيح ..؟
messageQueue.offer(m);
________________________________________________

