run 方法是运行线程时需要执行的代码。(你要用代码——也就是 run() 方法——来描述一个处理过程,而不是创建一个表示这个处理过程的对象。在如何理解线程方面,一直存在着争议。这取决于,你是将线程看作是对象还是处理过程。如果你认为它是一个处理过程,那么你就摆脱了“万物皆对象”的 OO 教条。但与此同时,如果你只想让这个处理过程掌管程序的某一部分,那你就没理由让整个类都成为 Runnable 的。有鉴于此,用内部类的形式将线程代码隐藏起来,通常是个更明智的选择。来自TIJ3。)
  在 Java 语言中,我们可以通过下列两种方式来实现我们的run 方法:
  1、覆盖 java.lang.Thread 的 public void run() 方法。
  
public class SimpleThread extends Thread { 
    public SimpleThread(String str) { 
        super(str); 
    } 
    public void run() { 
       for (int i = 0; i < 10; i++) { 
           System.out.println(i + " " + getName()); 
           try { 
               sleep((long) (Math.random() * 1000)); 
           } catch (InterruptedException e) { 
           } 
       } 
        System.out.println("DONE! " + getName()); 
    } }
  调用上面定义的线程:
  
public class TwoThreadsDemo { 
    public static void main(String[] args) { 
       new SimpleThread("Jamaica").start(); 
       new SimpleThread("Fiji").start(); 
    } 
}
   2、实现 java.lang.Runnable 接口:
  
import java.awt.Graphics; 
import java.util.*; 
import java.text.DateFormat; 
import java.applet.Applet; 
  
public class Clock extends Applet implements Runnable { 
    private Thread clockThread = null; 
    public void start() { 
       if (clockThread == null) { 
           clockThread = new Thread(this, "Clock"); 
           clockThread.start(); 
       } 
    } 
    public void run() { 
        Thread myThread = Thread.currentThread(); 
       while (clockThread == myThread) { 
           repaint(); 
           try { 
               Thread.sleep(1000); 
           } catch (InterruptedException e) {} 
       } 
    } 
    public void paint(Graphics g) { 
        Calendar cal = Calendar.getInstance(); 
       Date date = cal.getTime(); 
        DateFormat dateFormatter = DateFormat.getTimeInstance(); 
        g.drawString(dateFormatter.format(date), 5, 10); 
    } 
    public void stop() { 
        clockThread = null; 
    } 
}  
 
  |