進程和線程

進程和線程的區別與聯系:
1、進程是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。進程一般由程序,數據集合和進程控制塊三部分組成。進程具有的特征:動態性、并發性、獨立性、結構性。
2、線程是程序執行的最小單位。線程上下文切換比進程上下文切換要快得多。
3、進程使用獨立的數據空間,而線程共享進程的數據空間。一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線。

創建線程有幾種不同的方式:
繼承Thread類、實現Runnable接口、使用Callable和FutureTask、使用線程池(如用Executor框架)、Spring實現多線程(底層是線程池)、定時器Timer(底層封裝了一個TimerThread對象)。
實現Runnable接口這種方式更受歡迎,因為不需要繼承Thread類,已經繼承或者需要繼承別的接口的時候,只能實現接口,Java是不支持多繼承的。同時,線程池也是非常高效的,很容易實現和使用。

線程在執行過程中,可以處于下面幾種狀態:
就緒(Runnable):線程準備運行,不一定立馬就能開始執行。
運行中(Running):進程正在執行線程的代碼。
等待中(Waiting):線程處于阻塞的狀態,等待外部的處理結束。
睡眠中(Sleeping):線程被強制睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待獲取鎖。
死亡(Dead):線程完成了執行。

start()方法和run()方法的區別:
當程序調用start()方法時,會創建一個新線程,然后執行run()方法。但是如果我們直接調用run()方法,則不會創建新的線程,run()方法將作為當前調用線程本身的常規方法調用執行,并且不會發生多線程。

一個線程代碼例子:

class RunnableDemo implements Runnable {
    private Thread t;
    private String threadName;

    RunnableDemo(String name) {
        // 初始化操作
        threadName = name;
        System.out.println("初始化線程名稱: " + threadName);
    }

    public void run() {
        // 運行時需要執行的操作
        System.out.println("線程正在執行: " + threadName);
        System.out.println("線程 " + threadName + " 執行結束.");
    }

    public void start() {
        // 創建線程
        System.out.println("開始創建線程: " + threadName);
        if (t == null) {
            t = new Thread(this, threadName);
            t.start();
        }
    }
}

public class test {
    public static void main(String args[]) {
        RunnableDemo R1 = new RunnableDemo("Thread-1");
        R1.start();
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。