1. 程式人生 > >多線程概述及線程實現

多線程概述及線程實現

學習 cto add 覆蓋 acc 重寫 允許 pri xtend

第1章 多線程概述
學習多線程之前,我們先要了解幾個關於多線程有關的概念。
A:進程:進程指正在運行的程序。確切的來說,當一個程序進入內存運行,即變成一個進程,進程是處於運行過程中的程序,並且具有一定獨立功能。
B:線程:線程是進程中的一個執行單元,負責當前進程中程序的執行,一個進程中至少有一個線程。一個進程中是可以有多個線程的,這個應用程序也可以稱之為多線程程序。
C:簡而言之:一個程序運行後至少有一個進程,一個進程中可以包含多個線程
什麽是多線程呢?即就是一個程序中有多個線程在同時執行。

第2章 線程實現

2.1 實現線程一:繼承Thread類
該如何創建線程呢?通過API中搜索,查到Thread類。通過閱讀Thread類中的描述。Thread是程序中的執行線程。Java 虛擬機允許應用程序並發地運行多個執行線程。

技術分享圖片
技術分享圖片
技術分享圖片
A:創建線程的步驟:
1.定義一個類繼承Thread。
2.重寫run方法。
3.創建子類對象,就是創建線程對象。
4.調用start方法,開啟線程並讓線程執行,同時還會告訴jvm去調用run方法
2.1.1 案例代碼一:

package com.itheima_01;

public class MyThread extends Thread {

@Override

public void run() {

for (int i = 0; i < 100; i++) {

System.out.println(getName() + ":" + i);

}

}

}
package com.itheima_01;

/*

 * 多線程的實現方式:

 * 方式1:一種方法是將類聲明為 Thread 的子類。該子類應重寫 Thread 類的 run 方法。接下來可以分配並啟動該子類的實例

 *

 * Thread

 * String getName()      返回該線程的名稱。

 * void   setName(String name) 改變線程名稱,使之與參數 name 相同。

 *

 *

 * CPU執行程序的隨機性

 */

public class ThreadDemo2 {

public static void main(String[] args) {

//創建線程實例

MyThread mt = new MyThread();

//修改線程名字

mt.setName("張三");

//啟動線程

mt.start();

//創建線程實例

MyThread mt2 = new MyThread();

mt2.setName("老王");

//啟動線程

mt2.start();

}

}

2.2 實現線程二:實現Runnable接口
創建線程的另一種方法是聲明實現 Runnable 接口的類。該類然後實現 run 方法。然後創建Runnable的子類對象,傳入到某個線程的構造方法中,開啟線程。
為何要實現Runnable接口,Runable是啥玩意呢?繼續API搜索。
查看Runnable接口說明文檔:Runnable接口用來指定每個線程要執行的任務。包含了一個 run 的無參數抽象方法,需要由接口實現類重寫該方法。
技術分享圖片
技術分享圖片
技術分享圖片
創建線程的步驟。
1、定義類實現Runnable接口。
2、覆蓋接口中的run方法。。
3、創建Thread類的對象
4、將Runnable接口的子類對象作為參數傳遞給Thread類的構造函數。

5、調用Thread類的start方法開啟線程。
2.2.1 案例代碼二:

package com.itheima_02;

public class MyThread2 implements Runnable {

int num;

public MyThread2(int num) {

this.num = num;

}

@Override

public void run() {

for (int i = 0; i < 100; i++) {

//Thread t = Thread.currentThread();

//System.out.println(t.getName() + ":" + i);

//鏈式編程

System.out.println(Thread.currentThread().getName() + ":" + i + num);

}

}

}

多線程概述及線程實現