Java多執行緒內部類
阿新 • • 發佈:2018-12-26
有時通過內部類來將執行緒程式碼隱藏在類中將會很有用
public class InnerThread1 { private int countDown = 5; private Inner inner; private class Inner extends Thread{ public Inner(String name) { super(name); start(); } @Override public void run() { try { while(true){ System.out.println(this); if(--countDown==0)return; sleep(10); } } catch (Exception e) { // TODO: handle exception } } public String toString(){ return getName() + ":" + countDown; } public void newMethod(){ System.out.println("其它方法需要訪問的新方法!"); } } public InnerThread1(String name){ inner = new Inner(name); inner.newMethod(); } public static void main(String[] args) { new InnerThread1("caogen"); } }
InnerThread1建立了一個擴充套件Thread的匿名內部類,並且在構造器中建立了這個內部類的一個例項。如果內部類具有你在其它方法中需要訪問的新方法。其實我不知道這樣做有多大意義
public class InnerThread2 { private int countDown = 5; private Thread t; public InnerThread2(String name){ t = new Thread(name){ @Override public void run() { try { while(true){ System.out.println(this); if(--countDown==0)return; sleep(10); } } catch (Exception e) { // TODO: handle exception } } public String toString(){ return getName() + ": " + countDown; } }; t.start(); } public static void main(String[] args) { new InnerThread2("caogen"); } }
InnerThread2展示了可替換的方式:在構造器中建立了一個匿名的Thread子類,並且將其向上轉型為Thread引用t。如果類中的其它方法需要訪問t,那它們可以通過Thread介面來實現。