java 使用匿名內部類的方式建立執行緒並設定和獲取執行緒名字
阿新 • • 發佈:2018-11-27
有些方法需要傳入介面的例項或者抽象類的例項物件,比如Thread有一個構造方法,Thread(Runnable target)
這時可以可以自定義類實現Runnable介面,重寫介面中的方法,將自定義類的物件傳入構造方法中
也可以使用匿名內部類,即在建立Thread物件時傳入Runnable介面,在其後面重寫介面的方法
這篇文章介紹下使用匿名內部類建立三個執行緒
package createThreads; import java.util.concurrent.*; public class anoymousThreadTest01 { public static void main(String[] args) throws ExecutionException, InterruptedException { //使用匿名內部類建立Thread物件,1 new Thread(){ @Override public void run() { System.out.println("hello world 1"); } }.start(); //2 Thread t1=new Thread(){ @Override public void run() { System.out.println( "hello world 2"); } }; t1.start(); //使用匿名內部類建立Runnable介面例項,建立執行緒1 new Thread(new Runnable() { @Override public void run() { System.out.println( "你好,世界 2"); } }).start(); //2 Thread t2=new Thread(new Runnable() { @Override public void run() { System.out.println( "你好,世界 2"); } }); t2.start(); //使用匿名內部類建立Callable介面例項,建立執行緒 ExecutorService es= Executors.newFixedThreadPool(2);//建立執行緒池 Future<Integer> f=es.submit(new Callable<Integer>() { //建立Callable介面例項,重寫call方法,放入執行緒池 @Override public Integer call() { return 3*5; } }); System.out.println( f.get()); //輸出返回的結果 es.shutdown(); //關閉執行緒池 } } out: 你好,世界 2 hello world 1 你好,世界 2 hello world 2 15
獲取名字和設定名字的三種方式,以Thread為例,獲取當前執行緒物件可以試用Thread類的靜態方法currentThread()
public class anoymousThreadTest02 { public static void main(String[] args){ //設定執行緒名字,1利用Thread類的setName方法 Thread t1=new Thread(){ @Override public void run() { System.out.println( "執行緒t1的名字是: "+this.getName()); } }; t1.setName("執行緒t1"); //2,在Thread類的構造方法中傳入名字 Thread t2=new Thread("執行緒t2"){ @Override public void run() { System.out.println( "執行緒t2的名字是: "+getName()); } }; //3,在run方法體中使用Thread類的setName方法 Thread t3=new Thread(){ @Override public void run() { this.setName("執行緒t3"); System.out.println( "執行緒t3的名字是: "+this.getName()); } }; t3.start(); t1.start(); t2.start(); // 獲取當前執行緒物件,利用Thread中的currentThread方法 //Runnable介面中的run方法無法直接利用getName方法,可先獲取當前物件,再利用Thread類的getName方法獲取當前執行緒名字 Thread t4=new Thread(new Runnable() { @Override public void run() { System.out.println( "執行緒t4的名字是: "+Thread.currentThread().getName()); } },"執行緒t4"); t4.start(); //不設定執行緒名字,系統會預設為執行緒命名 Thread t5=new Thread(){ @Override public void run() { System.out.println( "執行緒t5的名字是: "+getName()); } }; t5.start(); //設定main方法的執行緒名字並列印 Thread.currentThread().setName("main方法"); System.out.println( "main方法的執行緒名字是: "+Thread.currentThread().getName()); } }