创建两个线程,一个每隔一秒将整型变量num加一,另一个线程每隔三秒判断num是否大于100,若是结束两个线程。
用应用程序和Applet都可以。请各位高手给出代码学习一下。另外以下是我的Applet有错,请各位指点。import java.applet.*;
import java.awt.*;
public class Test extends Applet implements Runnable
{
 int num; 
Thread T1,T2;
TextArea ta;
public void init()
   
    {num=1;
T1=new Thread(this);
T2=new Thread(this);
ta=new TextArea(12,20);
add(ta);}
public void start()

{T1.start();
T2.start();
}
public  synchronized void change(int number)
{
    while(true)
{if (Thread.currentThread()==T1)
{number+=number;
try{
  Thread.sleep(1000);
}catch(InterruptedException e)
{System.out.println(e);}
ta.append(" "+number);
}
  else if  (Thread.currentThread()==T2)
{if(number>50)
{
ta.append("\n"+number);
     return;
 }
 else{
 try{
 Thread.sleep(500);}
catch(InterruptedException e){System.out.println(e);} }}

}}


public void run()
{
if(Thread.currentThread()==T1||Thread.currentThread()==T2)
  change(num);

}

}

解决方案 »

  1.   

    class CommStruct{//用来存放信息的类
    boolean isFinished=false;
    int num=0;
    }class Thread1 extends Thread{
      CommStruct struct;
      public Thread1(CommStruct struct){
        this.struct=struct;
      }
      public void run(){
       while(!struct.isFinished){
          try{sleep(1000);}catch(Exception e){}
          synchronized(struct){
             if(struct.isFinished){
                 return;
              }
             struct.num++;
          }
       }
      }
    }class Thread2 extends Thread{
      CommStruct struct;
      public Thread2(CommStruct struct){
        this.struct=struct;
      }
      public void run(){
       while(!struct.isFinished){
          try{sleep(3000);}catch(Exception e){}
          synchronized(struct){
             if(struct.isFinished){
                 return;
              }
              if(struct.num>100){
                struct.isFinished=true;
                return;
              }
          }
       }
      }
    }
    没编译,自己看吧,应该有拼写错误
      

  2.   

    import java.applet.*;
    import java.awt.*;public class d extends Applet implements Runnable {
        CommStruct s;    Thread1 T1;    Thread2 T2;    public static TextArea ta;    public void init()    {
    s = new CommStruct();
    T1 = new Thread1(s);
    T2 = new Thread2(s);
    ta = new TextArea(12, 20);
    add(ta);
        }    public void start()
        {
    run();
        }    public void run() {
    T1.start();
    T2.start();
        }}class CommStruct {// 用来存放信息的类
        boolean isFinished = false;    int num = 90;
    }class Thread1 extends Thread {
        CommStruct struct;    public Thread1(CommStruct struct) {
    this.struct = struct;
        }    public void run() {
    while (!struct.isFinished) {
        try {
    sleep(1000);
        } catch (Exception e) {
        }
        synchronized (struct) {
    if (struct.isFinished) {
        return;
    } print(d.ta);
    struct.num++;

        }
    }
        }
        
        public void print(TextArea a){
    a.append(struct.num+" ");
    if (struct.num%4==0)
        a.append("\n");
        }
    }class Thread2 extends Thread {
        CommStruct struct;    public Thread2(CommStruct struct) {
    this.struct = struct;
        }    public void run() {
    while (!struct.isFinished) {
        try {
    sleep(3000);
        } catch (Exception e) {
        }
        synchronized (struct) {
    if (struct.isFinished) {
        return;
    }
    if (struct.num > 100) {
        struct.isFinished = true;
        return;
    }
        }
    }
        }
    }结合上面两人的完整程序
      

  3.   

    我的:   
    public class TwoThread extends Thread
    {
    private static int num=0;
    public void run()
    {
    while(true)
    {
    try
    {
    sleep(1000);
    System.out.println(num++);
    }
    catch(InterruptedException e){}
    }
    }
    public static void main(String[] args)
    {
    TwoThread tt=new TwoThread();
    tt.start();
    new Thread(new Runnable()
    {
    public void run()
    {
    try
    {
    while(true){
    Thread.currentThread().sleep(3000);
    if(num>100)
    System.exit(1);
    }
    }
    catch(InterruptedException e){}
    }
    }).start();
    }
    }