Handle concurrent read/write: use synchronized to lock the data : synchronized « Thread « Java Tutorial






import java.util.Iterator;
import java.util.Vector;

public class Main {
  public static void main(String[] args) throws Exception {
    Vector data = new Vector();
    new Producer(data).start();
    new Consumer(data).start();
  }
}

class Producer extends Thread {
  Vector data;

  Producer(Vector data) {
    super("Producer");
    this.data = data;
  }

  public void run() {
    while (true) {
      data.addElement(new Object());
      if (data.size() > 1000)
        data.removeAllElements();
    }
  }
}

class Consumer extends Thread {
  Vector data;

  Consumer(Vector data) {
    super("Consumer");
    this.data = data;
  }

  public void run() {
    while (true) {
      synchronized (data) {
        Iterator it = data.iterator();
        while (it.hasNext())
          it.next();
      }
    }
  }
}








10.11.synchronized
10.11.1.Test Synchronized method
10.11.2.Test Unsynchronized method
10.11.3.This program is not synchronized.
10.11.4.This program uses a synchronized block.
10.11.5.Flag Communication
10.11.6.Waiting on an object
10.11.7.wait() and notify() must only be issued inside a synchronized block
10.11.8.guarantee that threads are woken in the same order in which they waited
10.11.9.creating a piped communications system between two threads.
10.11.10.Handle concurrent read/write: use synchronized to lock the data
10.11.11.A synchronized collection with Collections.synchronizedCollection
10.11.12.Determining If the Current Thread Is Holding a Synchronized Lock