一、操作系統(tǒng)中c的概念
現(xiàn)在的操作系統(tǒng)是多任務(wù)操作系統(tǒng)。多線程是實現(xiàn)多任務(wù)的一種方式。
進(jìn)程是指一個內(nèi)存中運行的應(yīng)用程序,每個進(jìn)程都有自己獨立的一塊內(nèi)存空間,一個進(jìn)程中可以啟動多個線程。比如在Windows系統(tǒng)中,一個運行的exe就是一個進(jìn)程。線程是指進(jìn)程中的一個執(zhí)行流程,一個進(jìn)程中可以運行多個線程。比如java.exe進(jìn)程中可以運行很多線程。線程總是屬于某個進(jìn)程,進(jìn)程中的多個線程共享進(jìn)程的內(nèi)存!巴瑫r”執(zhí)行是人的感覺,在線程之間實際上輪換執(zhí)行。
二、Java中的線程
在Java中,“線程”指兩件不同的事情:
1、java.lang.Thread類的一個實例;
2、線程的執(zhí)行。
使用java.lang.Thread類或者java.lang.Runnable接口編寫代碼來定義、實例化和啟動新線程。一個Thread類實例只是一個對象,像Java中的任何其他對象一樣,具有變量和方法,生死于堆上。Java中,每個線程都有一個調(diào)用棧,即使不在程序中創(chuàng)建任何新的線程,線程也在后臺運行著。一個Java應(yīng)用總是從main()方法開始運行,mian()方法運行在一個線程內(nèi),它被稱為主線程。一旦創(chuàng)建一個新的線程,就產(chǎn)生一個新的調(diào)用棧。線程總體分兩類:用戶線程和守候線程。
當(dāng)所有用戶線程執(zhí)行完畢的時候,JVM自動關(guān)閉。但是守候線程卻不獨立于JVM,守候線程一般是由操作系統(tǒng)或者用戶自己創(chuàng)建的。
———————————MultiT.java—————————————————
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
//mt.setDaemon(true);//設(shè)定為后臺線程,main進(jìn)程結(jié)束時,后臺進(jìn)程也跟著結(jié)束。
//mt.setPriority(Thread.MAX_PRIORITY); //設(shè)定線程優(yōu)先級,MAX_PRIORITY為10,MIN_PRIORITY為1,NORM_PRIORITY為5。
//設(shè)定為最高優(yōu)先級后,程序運行時,mt線程一直運行,強(qiáng)制終止時,main線程才運行。
//設(shè)定為最高優(yōu)先級的線程,無論有無yield();,線程總一直運行,直到強(qiáng)制終止時,main和mt線程交替運行。
mt.start();
int index=0;
while(true) //顯示結(jié)果與教程不同。
{
if(index++==100)
break;
System.out.println("main:"+Thread.currentThread().getName()); //獲取線程名字。
}
}
}
class MyThread extends Thread
{
public void run()
{
while(true)
{
System.out.println(getName());
yield(); //允許當(dāng)前線程停止,轉(zhuǎn)去執(zhí)行其他線程,靜態(tài)方法。
//mt進(jìn)程執(zhí)行時,切換到main進(jìn)程,main進(jìn)程執(zhí)行一段時間后。
//切換進(jìn)程到mt,mt執(zhí)行完獲取名字后,返回到main進(jìn)程。
}
}
}
//一個長時間處于等待狀態(tài)的線程也有可能被線程調(diào)度器調(diào)度,從而運行。
//打破高優(yōu)先級線程始終獲有運行時間的狀態(tài)。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |