進程和線程的概述

1. 程序,線程,進程的概念:

程序:編寫的靜態代碼
進程:程序的一次執行的過程。
線程:能在進程中獨立完成的子任務。

2 Java實現多線程的兩種方法:

繼承Thread類
代碼:

public class MyThread extends Thread{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        System.out.println("繼承Thread的線程:"+Thread.currentThread().getName());

    }
    public static void main(String[] args) {
        MyThread  thread=new MyThread();
        System.out.println("當前運行的線程:"+Thread.currentThread().getName());
        thread.start();
    }

}
################################
運行結果:
當前運行的線程:main
繼承Thread的線程:Thread-0

注意:main線程不是主函數的main,而是系統的主線程.

Thread.currentThread:表示的是當前運行的線程。
Thread類其實是實現的Runnable接口的:我們看源碼:

public class java.lang.Thread implements java.lang.Runnable {
。。。
}

實現Runnable接口
代碼:

public class MyRun implements Runnable{

    public MyRun()
    {
        System.out.println("當前運行的線程:"+Thread.currentThread().getName());
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("實現Runnable接口:"+Thread.currentThread().getName());

    }

}
public static void main(String[] args) {
        MyRun run=new MyRun();
        Thread thread1=new Thread(run);
        Thread thread2=new Thread(run);
        thread1.start();
        thread2.start();
    }
###################################
結果:當前運行的線程:main
實現Runnable接口:Thread-0
實現Runnable接口:Thread-1

Thread類的構造函數:

構造方法摘要
Thread()           分配新的 Thread 對象。
Thread(Runnable target)           分配新的 Thread 對象。
Thread(Runnable target, String name)           分配新的 Thread 對象。
Thread(String name)           分配新的 Thread 對象。
Thread(ThreadGroup group, Runnable target)           分配新的 Thread 對象。
Thread(ThreadGroup group, Runnable target, String name)           分配新的 Thread 對象,以便將 target 作爲其運行對象,將指定的 name 作爲其名稱,並作爲 group 所引用的線程組的一員。
Thread(ThreadGroup group, Runnable target, String name, long stackSize)           分配新的 Thread 對象,以便將 target 作爲其運行對象,將指定的 name 作爲其名稱,作爲 group 所引用的線程組的一員,並具有指定的堆棧大小。
Thread(ThreadGroup group, String name)           分配新的 Thread 對象。

兩種多線程的創建方式的對比

正如前面講的Thread類其實是實現Runnable接口,所以對着兩者比較我們可以引申爲時extends和implements的比較。瞭解Java的繼承和多態的知識就會知道後者好。
原因:第一,Java單一繼承,接口可以多種實現。第二,利用接口有利於降低了程序之間的耦合度

線程之間的狀態:

枚舉常量摘要
BLOCKED           受阻塞並且正在等待監視器鎖的某一線程的線程狀態。
NEW           至今尚未啓動的線程的狀態。
RUNNABLE           可運行線程的線程狀態。
TERMINATED           已終止線程的線程狀態。
TIMED_WAITING           具有指定等待時間的某一等待線程的線程狀態。
WAITING           某一等待線程的線程狀態。

流程圖:
進程和線程的概述

現在我們來講講爲什麼用多線程:

現在的cpu發展迅速,從單核的到多核,這時我們將面臨一個問題:如何充分的利用cpu呢?這時多線程的出現解決了這個問題。簡單點來說:線程可以有效地降低程序的開發和維護等成本,同時提升複雜應用程序的性能。
具體的來說:

  • 1.發揮多處理器的強大功能
  • 2.在單處理器系統上獲得更高的吞吐量
  • 3 建模的簡單性
  • 4 異步事件的簡化處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章