1. 程式人生 > >Java_基礎—多執行緒(匿名內部類實現執行緒的兩種方式和設定名字的方法)

Java_基礎—多執行緒(匿名內部類實現執行緒的兩種方式和設定名字的方法)

一、為什麼要使用匿名內部類來實現多執行緒?

好處:不需要另找一個類來繼承Thread類和實現Runnable介面啦,只需要new Thread()或者new Runnable() 後,重寫裡面的run()方法就可以了。

package com.soar.thread;

public class Demo4_Thread {


    public static void main(String[] args) {
        //匿名內部類通過Thread開啟多執行緒
        new Thread(){                               //1.繼承Thread類
public void run(){ //2.重寫run()方法 for(int i=0; i<100; i++){ //3.將要執行的程式碼寫在run()方法中 System.out.println("aaaaaaa"); } } }.start(); //4.開啟執行緒 //匿名內部類通過Runna開啟多執行緒
new Thread(new Runnable(){ //1.將Runnable的之類物件傳遞給Thread的構造方法 public void run(){ //2.重寫run()方法 for(int i=0; i<100; i++){ //3.將要執行的程式碼寫在run()方法中 System.out.println("bb"); } } }).start(); //4.開啟執行緒
} }

二、為執行緒設定名字的兩種方式

  1. 通過引數設定名字
  2. 通過呼叫setName來設定名字
package com.soar.threadmethod;

public class Demo1_Name {

    public static void main(String[] args) {
        //argsSetName();    //通過傳入引數,給執行緒改名


        Thread t1 = new Thread(){
            public void run(){
                //this.setName("張三");
                System.out.println(this.getName()+"   aaaaa");  //張三   aaaaa
            }
        };

        Thread t2 = new Thread(){
            public void run(){
                //this.setName("李四");
                System.out.println(this.getName()+"   bb");     //李四   bb
            }
        };

        t1.setName("張三");
        t2.setName("李四");
        t1.start();             //張三   aaaaa
        t2.start();             //李四   bb
    }


    //通過傳入引數,給執行緒改名
    public static void argsSetName() {
        new Thread("高飛"){
            public void run(){
                System.out.println(this.getName()+"    aaaa");  //高飛    aaaa
            }
        }.start();

        new Thread("高飛飛"){
            public void run(){
                System.out.println(this.getName()+"    bb");    //高飛飛    bb
            }
        }.start();
    }

}

三、獲取當前執行緒的物件

在匿名Runnable中通過使用
Thread.currentThread(), 主執行緒也可以獲取

package com.soar.threadmethod;

public class Demo2_CurrentThread {

    public static void main(String[] args) {

        new Thread(){
            public void run(){
                System.out.println(getName()+"   aaaa");    //Thread-0   aaaa
            }
        }.start();

        new Thread(new Runnable(){
            public void run(){
                //Thread.currentThread()獲取當前正在執行的執行緒
                System.out.println(Thread.currentThread().getName()+"  bb");    //Thread-1  bb
            }
        }).start();

        //System.out.println(Thread.currentThread().getName()); //main
        Thread.currentThread().setName("我是主執行緒");
        System.out.println(Thread.currentThread().getName());   //我是主執行緒
    }

}