javaSE-多线程1
1,java多線程的概念
Java語言的優(yōu)勢之一就是線程處理較為簡單。
一般操作系統(tǒng)都支持同時運行多個任務,一個任務通常就是一個程序,每個運行中的程序被稱為一個進程,當一個程序運行時,內部可能包含多個順序執(zhí)行流,每個順序執(zhí)行流就是一個線程。
1) 程序 指令 + 數據的byte序列,如: qq.exe
2) 進程 正在運行的程序, 是程序勱態(tài)的執(zhí)行過程(運行于內存中)
3) 線程 在進程內部,并發(fā)運程的過程(Java中的方法可以看做線程)
4) 并發(fā) 進程是并發(fā)運行的,OS將時間劃分為很多時間片段(時間片),盡可能均勻分配給正在運行的程序,微觀上進程走走停停,宏觀上都在運行,這種都運行的現象叫并行,但是不是絕對意義上的“同時發(fā)生
?
2,Java 創(chuàng)建一個線程
**1) Thread 類
線程類(Thread)包含一個可以運行的過程(方法):run()方法
2) 創(chuàng)建一個具體線程的步驟如下:
1,繼承Thread類
2,重寫run方法,就是更新運行過程,實現用戶自己的過程
3,創(chuàng)建線程實例
4,使用線程實例的start()方法啟動線程,啟動以后線程會并發(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)建線程實例 10 Thread t1 = new Person(); 11 Thread t2 = new Person(); 12 Thread t3 = new Person(); 13 //t1.run(); 14 //t2.run(); 15 //啟動線程 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 }?運行,結果隨機。
main方法也是個線程。
3,線程的5個狀態(tài)
1)NEW ,新建狀態(tài),當程序用new關鍵字創(chuàng)建一個線程后,該線程就處于新建狀態(tài),此時,該線程還未啟動,當線程對象調用start()方法后,線程啟動,進入Runnable狀態(tài)
2)Runnable,可運行/就緒狀態(tài) ,此時線程準備就緒,等待獲取CPU資源
3)Runing,運行態(tài),此時線程獲取CPU,進入Runing狀態(tài),開始執(zhí)行線程體,即run()方法中的內容
a,當一條線程開始運行時,如果它不是一瞬間完成,那么它不可能一直處于Running狀態(tài),
線程在執(zhí)行過程中會被中斷,目的是讓其它線程獲得執(zhí)行的機會,像這樣線程調度的策 略叏決于底層平臺。對于搶占式策略的平臺而言,系統(tǒng)系統(tǒng)會給每個可執(zhí)行的線程一小 段時間來處理任務,當該時間段(時間片)用完,系 統(tǒng)會剝奪該線程所占資源(CPU), 讓其他線程獲得運行機會。
b,調用yield()方法,可以使線程由Running狀態(tài)主動進入Runnable狀態(tài)
.....
4)Block,阻塞/掛起狀態(tài)
線程進入阻塞的方式有很多,如
? a,線程調用sleep()方法主動放棄CPU資源,進入sleep block,
b,線程調用一個阻塞式IO方法,在該方法返回前,線程進入IO block
......
5)Dead,死亡狀態(tài),當線程的run()方法執(zhí)行結束時,線程進入Dead狀態(tài)
?
?
轉載于:https://www.cnblogs.com/andy-wcl/p/3228990.html
總結
以上是生活随笔為你收集整理的javaSE-多线程1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++:new 和 delete
- 下一篇: poj 1654 Area 多边形面积