import java.util.Collections; 
import java.util.LinkedList; 
import java.util.List; 
 
class PrepareProduction implements Runnable { 
  private final List<String> queue; 
 
  PrepareProduction(List<String> q) { 
    queue = q; 
  } 
 
  public void run() { 
    queue.add("1"); 
    queue.add("done"); 
  } 
} 
 
class DoProduction implements Runnable { 
  private final List<String> queue; 
 
  DoProduction(List<String> q) { 
    queue = q; 
  } 
 
  public void run() { 
    String value = queue.remove(0); 
    while (!value.equals("*")) { 
      System.out.println(value); 
      value = queue.remove(0); 
    } 
  } 
} 
 
public class Main { 
  public static void main(String[] args) throws Exception { 
    List q = Collections.synchronizedList(new LinkedList<String>()); 
    Thread p1 = new Thread(new PrepareProduction(q)); 
    Thread c1 = new Thread(new DoProduction(q)); 
    p1.start(); 
    c1.start(); 
    p1.join(); 
    c1.join(); 
  } 
} 
 
    
     
     
     
     
     
  
  |