1.使用普通內部類繼承Thread類
public class ThreadTestOne { private int countDown = 5; private Inner inner; private class Inner extends Thread{ Inner(String name){ super(name); start(); } public void run(){ while(true){ System.out.println(this); if(--countDown == 0) return; try{ sleep(10); }catch(InterruptedException e){ throw new RuntimeException(e); } } } public String toString(){ return "#"+getName()+":"+countDown; } } public ThreadTestOne(String name){ inner = new Inner(name); }}
2.使用匿名內部類構造Thread類,重寫run()方法
public class ThreadTestTwo { private int countDown = 5; private Thread t; public ThreadTestTwo(String name){ t = new Thread(name){ public void run(){ while(true){ System.out.println(this); if(--countDown == 0) return; try{ sleep(10); }catch(InterruptedException e){ throw new RuntimeException(e); } } } public String toString(){ return "#"+getName()+":"+countDown; } }; t.start(); }}
3.使用普通內部類實現Runnable類
public class RunnableTestOne { private int countDown = 5; private Inner inner; private class Inner implements Runnable{ Thread t; Inner(String name){ t = new Thread(this,name); t.start(); } public void run(){ while(true){ System.out.println(this); if(--countDown == 0) return; try{ Thread.sleep(10); }catch(InterruptedException e){ throw new RuntimeException(e); } } } public String toString(){ return "#"+Thread.currentThread().getName()+":"+countDown; } } public RunnableTestOne(String name){ inner = new Inner(name); }}
4.使用匿名內部類構造Thread類,參數1構造一個Runnable對象,參數2指明線程名稱
public class RunnableTestTwo { private int countDown = 5; private Thread t; public RunnableTestTwo(String name){ t = new Thread(new Runnable(){ public void run(){ while(true){ System.out.println(this); if(--countDown == 0) return; try{ Thread.sleep(10); }catch(InterruptedException e){ throw new RuntimeException(e); } } } public String toString(){ return "#"+Thread.currentThread().getName()+":"+countDown; } },name); t.start(); }}
5.使用局部內部類,即在方法內部構造Thread類,重寫run()方法
public class ThreadMethod { private int countDown = 5; private Thread t; private String name; public ThreadMethod(String name){ this.name = name; } public void runThread(){ if(t == null){ t = new Thread(name){ public void run(){ while(true){ System.out.println(this); if(--countDown == 0) return; try{ sleep(10); }catch(InterruptedException e){ throw new RuntimeException(e); } } } public String toString(){ return "#"+getName()+":"+countDown; } }; t.start(); } }}