//DeadClass2.java
//线程同步
//2009-11-22
//<applet code=DeadClass3 width=200 height=100>
//</applet>
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DeadClass3 extends JApplet
{
JTextField txt1=new JTextField(5);
JTextField txt2=new JTextField(5);
JTextField txt3=new JTextField(10);
JButton countButton=new JButton("Begin");
JButton compareButton=new JButton("Compare");
class CountThread extends Thread
{
int count1=0;
int count2=0;
int count;
boolean flag;
public void run(){
while (true)
{
synchronized(this){
txt1.setText(Integer.toString(count1++));
txt2.setText(Integer.toString(count2--));
}
try
{
sleep(1000);
}
catch (InterruptedException e){}
}
}
public synchronized void countUnEquals(){
if (count1!=count2)
{
txt3.setText("Unequal"+Integer.toString(++count)+"times");
flag=false;
}
if (flag==true)
{
txt2.setText("the count 1 equals to count2");
}
}
}
class CompareThread extends Thread
{
public void run(){
if (countT!=null)
{
while (true)
{
countT.countUnEquals();
try
{
sleep(1000);
}
catch (InterruptedException e){}
}
}
}
}
CountThread countT;
CompareThread compareT;
class CountButtonLis implements ActionListener
{
public void actionPerformed(ActionEvent e){
if (countT==null)
{
countT=new CountThread();
countT.start();
}
}
}
class CompareButtonLis implements ActionListener
{
public void actionPerformed(ActionEvent e){
if (compareT==null)
{
compareT=new CompareThread();
compareT.start();
}
}
}
public void init(){
Container cp=getContentPane();
cp.setLayout(new FlowLayout());
cp.add(txt1);
cp.add(txt2);
cp.add(txt3);
cp.add(countButton);
cp.add(compareButton);
countButton.addActionListener(new CountButtonLis());
compareButton.addActionListener(new CompareButtonLis());
}
}