package jsf;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
 import java.awt.*;
 import java.awt.event.*;
 import java.applet.*; class TwoCounter extends Thread {
   private boolean started = false;
   private TextField
     t1 = new TextField(5),
     t2 = new TextField(5);
   private Label l =  new Label("count1 == count2");
   private int count1 = 0, count2 = 0;
   // Add the display components as a panel
   // to the given container:
   public TwoCounter(Container c) {
     Panel p = new Panel();
     p.add(t1);
     p.add(t2);
     p.add(l);
     c.add(p);
   }
   public void start() {
     if(!started) {
       started = true;
       super.start();
     }
   }
   public void run() {
     while (true) {
     synchronized(this){       t1.setText(Integer.toString(count1++));
       t2.setText(Integer.toString(count2++));
       try {
         sleep(500);
       }
       catch (InterruptedException e) {}
     }
      }
   }
   public synchronized void synchTest() {
   Counter2.incrementAccess();
     if(count1 != count2)
       l.setText("Unsynched");
    //   }   public  synchronized void stopwe() {    try {
      System.out.print("s/");
      this.wait();
    }
    catch (InterruptedException ex) {
    }
   }
 public synchronized void continuwe() {
    this. notify();
 }
 } class Watcher extends Thread {
   private Counter2 p;
   public Watcher(Counter2 p) {
     this.p = p;
     start();
   }
   public void run() {
     while(true) {
       for(int i = 0; i < p.s.length; i++)
       {
        p.s[i].synchTest();
        p.s[i].stopwe();
      }       try {
         sleep(500);
       } catch (InterruptedException e){}
     }
   }
 }
 class Continu extends Thread {
   private Counter2 p;
   public Continu(Counter2 p) {
     this.p = p;
     start();
   }
   public void run() {
    while(true){
       for(int i = 0; i < p.s.length; i++)
       {
        p.s[i].continuwe();      }       try {
         sleep(500);
       } catch (InterruptedException e){}
 
   }   }
 } public class Counter2 extends Applet {
   TwoCounter[] s;
   private static int accessCount = 0;
   private static TextField aCount =
     new TextField("0", 10);   public static void incrementAccess() {
     accessCount++;
     aCount.setText(Integer.toString(accessCount));
   }
   private Button
     start = new Button("Start"),
     observer = new Button("Observe"),continu = new Button("continu");
   private boolean isApplet = true;
   private int numCounters = 0;
   private int numObservers = 0;
   public void init() {
     Panel p = new Panel();
     if(isApplet) {
       numCounters = 2;
       numObservers =  2;
     }
     s = new TwoCounter[numCounters];
     for(int i = 0; i < s.length; i++)
     {  s[i] = new TwoCounter(this);
   }   start.addActionListener(new StartL());
       p.add(start);
     observer.addActionListener(new ObserverL());
     continu.addActionListener(new Counter1() );
     p.add(observer);
     p.add(continu);
     p.add(new Label("Access Count"));
     p.add(aCount);
     add(p);
   }
  class Counter1 implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    for(int i = 0; i < s.length; i++)
new     Continu(Counter2.this);
  }
}   class StartL implements ActionListener {
     public void actionPerformed(ActionEvent e) {
       for(int i = 0; i < s.length; i++)
         s[i].start();
     }
   }
   class ObserverL implements ActionListener {
     public void actionPerformed(ActionEvent e) {
       for(int i = 0; i < numObservers; i++)
         new Watcher(Counter2.this);
       
      
     }
     
   }
   public static void main(String[] args) {
     Counter2 applet = new Counter2();
     // This isn't an applet, so set the flag and
     // produce the parameter values from args:
     applet.isApplet =false;
     applet.numCounters =    (args.length == 0 ? 5 :  Integer.parseInt(args[0]));
     applet.numObservers =  (args.length < 2 ? 5 :   Integer.parseInt(args[1]));
     Frame aFrame = new Frame("Sharing1");
     aFrame.addWindowListener(
       new WindowAdapter() {
         public void windowClosing(WindowEvent e){
           System.exit(0);
         }
       });
     aFrame.add(applet, BorderLayout.CENTER);
     aFrame.setSize(350, applet.numCounters *100);
     applet.init();
    // applet.start();
     aFrame.setVisible(true);
   }
 } ///:~ 我要停止TwoCounter线程
现在我wait 停止的是Watcher线程这是怎么回事 如果我要停止TwoCounter线程 应该是怎么写?