1. 程式人生 > >進程和線程的概述

進程和線程的概述

分配 棧大小 nts 現在 一個 lock tex 等待 兩種方法

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 異步事件的簡化處理

進程和線程的概述