黑馬程序員--------Java多線程講解筆記
進(jìn)程:正在進(jìn)行中的程序。 每一個(gè)進(jìn)程執(zhí)行都有一個(gè)執(zhí)行順序,該順序是一個(gè)執(zhí)行路徑,或者叫一個(gè)控制單元。
線程:就是進(jìn)程中一個(gè)執(zhí)行單元或執(zhí)行情景或執(zhí)行路徑負(fù)責(zé)進(jìn)程中程序執(zhí)行的控制單元 。一個(gè)進(jìn)程中至少要有一個(gè)線程。當(dāng)一個(gè)進(jìn)程中線程有多個(gè)時(shí),就是多線程。
為什么要用多線程
1,讓計(jì)算機(jī)"同時(shí)"做多件事情,節(jié)約時(shí)間。
2,后臺(tái)運(yùn)行程序,提高程序的運(yùn)行效率.。
3,多線程可以讓程序"同時(shí)"處理多個(gè)事情。
4,計(jì)算機(jī)CPU大部分時(shí)間處于空閑狀態(tài),浪費(fèi)了CPU資源。
1.創(chuàng)建線程的兩種方式:
方式一步驟:繼承Thread類
子類覆蓋父類中的run方法,將線程運(yùn)行的代碼存放在run中。
建立子類對(duì)象的同時(shí)線程也被創(chuàng)建。
通過(guò)調(diào)用start方法開(kāi)啟線程。
public class ThreadTest extends Thread{ private int i; public void run() { for (i = 0; i < 100; i++) System.out.println(Thread.currentThread().getName() + "-------"+ i); } public static void main(String[] args) { Demo d1 = new Demo(); Demo d2 = new Demo(); d1.start(); d2.start(); for (int i = 0; i < 60; i++) System.out.println(Thread.currentThread().getName()+"----------" + i); } } |
方式二步驟:實(shí)現(xiàn)Runnable接口
子類覆蓋接口中的run方法。
通過(guò)Thread類創(chuàng)建線程,并將實(shí)現(xiàn)了Runnable接口的子類對(duì)象作為參數(shù)傳遞給Thread類的構(gòu)造函數(shù)。
Thread類對(duì)象調(diào)用start方法開(kāi)啟線程。
public class RunnableTest implements Runnable { private int num = 100; @Override public static void main(String args[]) { |
2.兩種創(chuàng)建方式的對(duì)比
Runnable接口相對(duì)于繼承Thread類的好處:
1.適合多個(gè)相同程序代碼的線程去處理同意資源的情況,把虛擬CPU(線程)同程序的代碼,數(shù)據(jù)有效分離,較好的體現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)思想。
2.可以避免由于java的單繼承特點(diǎn)帶來(lái)的局限。當(dāng)我們要將已經(jīng)繼承了某一個(gè)類的子類放入多線程中,由于一個(gè)類不能同時(shí)有兩個(gè)父類,所以只能使用Runnable接口方法。
3.有力與程序的健壯性,代碼能給被多個(gè)線程共享,代碼與數(shù)據(jù)是獨(dú)立的。
線程的四種狀態(tài)及其轉(zhuǎn)換
同步代碼塊
1)同步的前提:
A.必須有兩個(gè)或兩個(gè)以上的線程
B.必須保證同步的線程使用同一個(gè)鎖。必須保證同步中只能有一個(gè)線程在運(yùn)行。
好處與弊端:解決了多線程的安全問(wèn)題。多個(gè)線程需要判斷鎖,較為消耗資源。
public class RunnableTest implements Runnable { private int num = 100; @Override public static void main(String args[]) { } |
posted on 2013-09-05 10:25 順其自然EVO 閱讀(865) 評(píng)論(0) 編輯 收藏