一、什么是進(jìn)程
在復(fù)習(xí)線程之前,小編先給大家說一下進(jìn)程的概念。
所謂的進(jìn)程,就是系統(tǒng)進(jìn)行資源分配和調(diào)用的獨(dú)立單元,每一個(gè)進(jìn)程都有它獨(dú)立的內(nèi)存空間和系統(tǒng)資源。
目前的計(jì)算機(jī)系統(tǒng),可以分為單進(jìn)程和多進(jìn)程系統(tǒng),其區(qū)別如下:
·單進(jìn)程操作系統(tǒng):dos(一瞬間只能執(zhí)行一個(gè)任務(wù))
·多進(jìn)程單用戶操作系統(tǒng):Windows(一瞬間只能執(zhí)行多個(gè)任務(wù))
·多進(jìn)程多用戶操作系統(tǒng):Linux(一瞬間只能執(zhí)行多個(gè)任務(wù))
二. 什么是線程
然后我們?cè)賮砜纯词裁词蔷€程。
所謂的線程,就是進(jìn)程里面的一條執(zhí)行路徑,多個(gè)線程可以共享進(jìn)程里面的內(nèi)存空間和系統(tǒng)資源。一個(gè)進(jìn)程中可以有多個(gè)線程,各個(gè)線程都有不同的分工。
那么進(jìn)程和線程有什么關(guān)系呢?看看小編給大家的總結(jié)吧:
·進(jìn)程與進(jìn)程之間,其內(nèi)存空間和系統(tǒng)資源是獨(dú)立的;
·同一個(gè)進(jìn)程里的多個(gè)線程之間,其內(nèi)存空間和系統(tǒng)資源是共享的;
·一個(gè)進(jìn)程里可以有一條或一條以上的線程;
·如果一個(gè)進(jìn)程里只有一條線程,這條線程就叫做主線程;
·線程是在進(jìn)程里的,他們是包含與被包含的關(guān)系。
三. 創(chuàng)建線程的方式
那么我們?cè)撛趺磩?chuàng)建出一個(gè)線程呢?一般情況下,我們可以采用以下方式。
1.繼承線程類
在這種方式中,我們可以創(chuàng)建一個(gè)MyThread類繼承Thread,并重寫run方法,代碼如下:
public class Test01 {
public static void main(String[] args) {
//創(chuàng)建線程的對(duì)象
MyThread t = new MyThread();
//啟動(dòng)線程
t.start();
}
}
//線程類
class MyThread extends Thread{
//當(dāng)前線程搶到cpu資源后,就會(huì)執(zhí)行run方法
@Override
public void run() {
System.out.println("當(dāng)前線程搶到資源了");
}
}
2.實(shí)現(xiàn)Runnable接口
第二種方式就是實(shí)現(xiàn)Runnable接口。我們可以創(chuàng)建一個(gè)Task類,實(shí)現(xiàn)Runnable接口并重寫run方法。
public class Test01 {
public static void main(String[] args) {
Thread t = new Thread(new Task());
t.start();
}
}
//任務(wù)類
class Task implements Runnable{
//當(dāng)前線程搶到cpu資源后,就會(huì)執(zhí)行run方法
@Override
public void run() {
System.out.println("搶到資源了");
}
}
另外我們還可以通過實(shí)現(xiàn)Callable接口,或是利用Executors線程池創(chuàng)建線程,這兩種方式小編就不演示實(shí)現(xiàn)代碼了。
四. 總結(jié)
最后小編再給大家總結(jié)一下今天的重點(diǎn):
1.進(jìn)程與進(jìn)程的關(guān)系:進(jìn)程獨(dú)享內(nèi)存空間和系統(tǒng)資源;
2.線程與進(jìn)程的關(guān)系:一個(gè)進(jìn)程中至少包含一個(gè)線程;
3.線程與線程的關(guān)系:在同一個(gè)進(jìn)程里,多個(gè)線程共享內(nèi)存空間和系統(tǒng)資源;
4.一個(gè)進(jìn)程中可以包含多個(gè)線程,但只有一個(gè)主線程。