javaSE-多线程1
1,java多線程的概念
Java語(yǔ)言的優(yōu)勢(shì)之一就是線程處理較為簡(jiǎn)單。
一般操作系統(tǒng)都支持同時(shí)運(yùn)行多個(gè)任務(wù),一個(gè)任務(wù)通常就是一個(gè)程序,每個(gè)運(yùn)行中的程序被稱為一個(gè)進(jìn)程,當(dāng)一個(gè)程序運(yùn)行時(shí),內(nèi)部可能包含多個(gè)順序執(zhí)行流,每個(gè)順序執(zhí)行流就是一個(gè)線程。
1) 程序 指令 + 數(shù)據(jù)的byte序列,如: qq.exe
2) 進(jìn)程 正在運(yùn)行的程序, 是程序勱態(tài)的執(zhí)行過(guò)程(運(yùn)行于內(nèi)存中)
3) 線程 在進(jìn)程內(nèi)部,并發(fā)運(yùn)程的過(guò)程(Java中的方法可以看做線程)
4) 并發(fā) 進(jìn)程是并發(fā)運(yùn)行的,OS將時(shí)間劃分為很多時(shí)間片段(時(shí)間片),盡可能均勻分配給正在運(yùn)行的程序,微觀上進(jìn)程走走停停,宏觀上都在運(yùn)行,這種都運(yùn)行的現(xiàn)象叫并行,但是不是絕對(duì)意義上的“同時(shí)發(fā)生
?
2,Java 創(chuàng)建一個(gè)線程
**1) Thread 類
線程類(Thread)包含一個(gè)可以運(yùn)行的過(guò)程(方法):run()方法
2) 創(chuàng)建一個(gè)具體線程的步驟如下:
1,繼承Thread類
2,重寫run方法,就是更新運(yùn)行過(guò)程,實(shí)現(xiàn)用戶自己的過(guò)程
3,創(chuàng)建線程實(shí)例
4,使用線程實(shí)例的start()方法啟動(dòng)線程,啟動(dòng)以后線程會(huì)并發(fā)的去執(zhí)行run()
1 package com.andy.wcl.demo.thread; 2 3 public class DemoThread { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 //創(chuàng)建線程實(shí)例 10 Thread t1 = new Person(); 11 Thread t2 = new Person(); 12 Thread t3 = new Person(); 13 //t1.run(); 14 //t2.run(); 15 //啟動(dòng)線程 16 t1.start(); 17 t2.start(); 18 t3.start(); 19 } 20 } 21 22 //繼承thread類,重寫run方法, 23 class Person extends Thread{ 24 @Override 25 public void run() { 26 for(int i=0; i< 500; i++){ 27 System.out.println("大家好!我是線程:" + this.currentThread().getId() + this.currentThread().getName()); 28 } 29 } 30 }?運(yùn)行,結(jié)果隨機(jī)。
main方法也是個(gè)線程。
3,線程的5個(gè)狀態(tài)
1)NEW ,新建狀態(tài),當(dāng)程序用new關(guān)鍵字創(chuàng)建一個(gè)線程后,該線程就處于新建狀態(tài),此時(shí),該線程還未啟動(dòng),當(dāng)線程對(duì)象調(diào)用start()方法后,線程啟動(dòng),進(jìn)入Runnable狀態(tài)
2)Runnable,可運(yùn)行/就緒狀態(tài) ,此時(shí)線程準(zhǔn)備就緒,等待獲取CPU資源
3)Runing,運(yùn)行態(tài),此時(shí)線程獲取CPU,進(jìn)入Runing狀態(tài),開(kāi)始執(zhí)行線程體,即run()方法中的內(nèi)容
a,當(dāng)一條線程開(kāi)始運(yùn)行時(shí),如果它不是一瞬間完成,那么它不可能一直處于Running狀態(tài),
線程在執(zhí)行過(guò)程中會(huì)被中斷,目的是讓其它線程獲得執(zhí)行的機(jī)會(huì),像這樣線程調(diào)度的策 略叏決于底層平臺(tái)。對(duì)于搶占式策略的平臺(tái)而言,系統(tǒng)系統(tǒng)會(huì)給每個(gè)可執(zhí)行的線程一小 段時(shí)間來(lái)處理任務(wù),當(dāng)該時(shí)間段(時(shí)間片)用完,系 統(tǒng)會(huì)剝奪該線程所占資源(CPU), 讓其他線程獲得運(yùn)行機(jī)會(huì)。
b,調(diào)用yield()方法,可以使線程由Running狀態(tài)主動(dòng)進(jìn)入Runnable狀態(tài)
.....
4)Block,阻塞/掛起狀態(tài)
線程進(jìn)入阻塞的方式有很多,如
? a,線程調(diào)用sleep()方法主動(dòng)放棄CPU資源,進(jìn)入sleep block,
b,線程調(diào)用一個(gè)阻塞式IO方法,在該方法返回前,線程進(jìn)入IO block
......
5)Dead,死亡狀態(tài),當(dāng)線程的run()方法執(zhí)行結(jié)束時(shí),線程進(jìn)入Dead狀態(tài)
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/andy-wcl/p/3228990.html
總結(jié)
以上是生活随笔為你收集整理的javaSE-多线程1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++:new 和 delete
- 下一篇: poj 1654 Area 多边形面积