天天看點

java建立線程的三種方式

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class NewThreadDemo {

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        //第一種方式
        Thread t1 = new Thread(){
            
            @Override
            public void run() {
                System.out.println("new Thread 1");//輸出:new Thread 1
            }
        };//建立線程
        
        t1.start();//啟動線程
        System.out.println(t1.getName());//輸出:Thread-0
        
        //第二種方式
        Thread t2 = new Thread(new Runnable() {
            
            @Override
            public void run() {
                System.out.println("new Thread 2");//輸出:new Thread 2
            }
        });
        
        t2.start();

        System.out.println(Thread.currentThread().getName());//輸出:main
        
        
        //第三種方式
        FutureTask<String> ft = new FutureTask<String>(new Callable<String>() {
            
            @Override
            public String call() throws Exception {
                System.out.println("new Thread 3");//輸出:new Thread 3
                return "aaaa";
            }
        });
        
        Thread t3 = new Thread(ft);
        t3.start();
        String result = ft.get();
        System.out.println(result);//輸出:aaaa
        
    }
}      

首先要明白什麼是線程?

明白線程之前要明白什麼是程序?

程序是什麼呢?  程序是計算機中運作的一個應用程式.

線程:執行該程序的邏輯單元.  線程是用來執行程序的.

Java中萬物皆對象,線程也被描述成了一個對象就是Thread對象.

Java對多線程的支援也是特别完善的,特别是JDK1.5之後.

首先明白什麼是線程? 什麼是程序?

程序就是計算機中運作的一個應用程式.    線程就是執行該程序的邏輯單元.

線程管理:

         建立線程的方式:

                   1.繼承Thread類,并複寫run方法,建立該類對象,調用start方法開啟線程。

                   2.實作Runnable接口,複寫run方法,建立Thread類對象,将Runnable子類對象傳遞給Thread類對象。調用start方法開啟線程。

                   第二種方式好,将線程對象和線程任務對象分離開。降低了耦合性,利于維護

                   3.建立FutureTask對象,建立Callable子類對象,複寫call(相當于run)方法,将其傳遞給FutureTask對象(相當于一個Runnable)。

                   建立Thread類對象,将FutureTask對象傳遞給Thread對象。調用start方法開啟線程。這種方式可以獲得線程執行完之後的傳回值。

第三種使用Runnable功能更加強大的一個子類.這個子類是具有傳回值類型的任務方法.

第一種和第二種兩種方式是run()方法運作完是沒有傳回值的.

線程的資訊: 

public class ThreadInfo {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            
            @Override
            public void run() {
                synchronized (ThreadInfo.class) {
                    System.out.println("Thread");
                }
            }
        });
        
        t1.start();
        
        System.out.println(t1.getId());
        System.out.println(t1.getName());
        System.out.println(t1.getPriority());//優先級 1-10
        System.out.println(t1.getState());//線程狀态: NEW TERMINATED RUNNABLE TIMED_WAITING WAITING BLOCKED
    }
}