如果有多个控制流要同时运行,就要用到多线程来实现“并发”,也就是每个线程均匀的占用cpu时间片。关于java的多线程技术,可看下面这篇文章,大概了解一下:
http://www-900.ibm.com/developerWorks/cn/java/multithreading/index.shtml

解决方案 »

  1.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class NumDisplay extends JFrame{
    JTextField txt1;
    JTextField txt2;
    JButton btn1;
    JButton btn2;
    JButton btn3;
    JPanel panel1;
    JPanel panel2;
    public int num;
    boolean isStarted;
    boolean isStoped;
    boolean btn1Clicked;
    boolean btn2Clicked;
    public NumDisplay(){
    super("Number display in thread");
    txt1=new JTextField(10);
    txt2=new JTextField(10);
    panel1=new JPanel();
    panel2=new JPanel();
    btn1=new JButton("Click Me");
    btn1.addActionListener(
    new BtnListener(0)
    );
    btn2=new JButton("Click me");
    btn2.addActionListener(
    new BtnListener(1)
    );
    panel1.add(txt1);
    panel1.add(btn1);
    panel2.add(txt2);
    panel2.add(btn2);
    btn3=new JButton("Stop");
    btn3.addActionListener(
    new ActionListener(){
    public void actionPerformed(ActionEvent e){
    isStoped=true;
    btn1.setEnabled(true);
    btn2.setEnabled(true);
    }
    }
    );
    this.getContentPane().add(panel1,BorderLayout.NORTH);
    this.getContentPane().add(panel2,BorderLayout.CENTER);
    this.getContentPane().add(btn3,BorderLayout.SOUTH);
    setVisible(true);
    pack();

    }

    public static void main(String[] args){
    NumDisplay n=new NumDisplay();
    }

    synchronized void incNum(){
    num++;
    }

    synchronized void resetNum(){
    if(num==1000){
    num=0;
    }
    }

    class BtnListener implements ActionListener{
    int who;
    public BtnListener(int who){
    this.who=who;
    }

    public void actionPerformed(ActionEvent e){
    switch(who){
    case 0:
      btn1.setEnabled(false);
      isStoped=false;
      new DisplayThread(0).start();
      break;
    case 1:
      btn2.setEnabled(false);
      isStoped=false;
      new DisplayThread(1).start();
      break;
    }
    }

    }

    class DisplayThread extends Thread{
    int who;
    public DisplayThread(int who){
    this.who=who;
    }
    public void run(){
    JTextField txt;
    if(who==0){
    txt=txt1;
    }else{
    txt=txt2;
    }
    while(!isStoped){
    resetNum();
    incNum();
    txt.setText(String.valueOf(num));
    try{
    sleep(50);
    }catch(Exception x){
    }
    }
    }
    }

    }