文章目錄
- 行程、執行緒的概念
- ->行程
- ->執行緒
- ->Java執行緒與作業系統中執行緒的關系
- ->用Java創建執行緒的幾種方式
- ->繼承Thread類,重寫run方法
- ->繼承Thread類,重寫run方法,使用匿名內部類
- ->實作Runnable介面,重寫run方法
- ->實作Runnable介面,重寫run方法,使用匿名內部類
- ->使用lambda運算式
- ==行程、執行緒的區別(面試重點)==
| 歡迎閱讀本篇博客~ |
行程、執行緒的概念
->行程
我們計算機中的很多作業系統都是支持“多任務”的,每一個任務或者說每一個正在執行的塊程式就是一個行程,行程是作業系統分配資源的基本單位,
->執行緒
執行緒又叫“輕量型行程”“微行程”,如果把行程看作一個重騎兵,那么執行緒就可以看作一個輕騎兵,執行緒存在的原因,就是因為計算機系統在創建行程,銷毀行程或者調度行程等操作中的開銷太大,計算機有點吃不消~
執行緒包含在行程之中,是行程的實際運行單位,每個行程中至少存在一個執行緒,即主執行緒,執行緒可以看作一個“執行流”,當有任務來臨時,執行緒可以并發完成執行,
同一個行程中的多個執行緒共享該行程的全部資源,像虛擬地址空間,信號處理和檔案描述符等等,而同一個行程中的多個執行緒又有自己的呼叫堆疊、暫存器環境和執行緒本地儲存等,
執行緒是作業系統調度和執行的基本單位,
->Java執行緒與作業系統中執行緒的關系
作業系統內核中實作了執行緒這樣的機制,執行緒本就是作業系統中的概念,內核的執行緒提供了一些API供用戶使用,
而Java中的Thread類(執行緒)是對作業系統提供的執行緒API進一步的抽象與封裝使用,
->用Java創建執行緒的幾種方式
->繼承Thread類,重寫run方法
package 執行緒;
class MyThread extends Thread{
@Override //run就是執行緒中的任務
public void run() {
System.out.println("創建執行緒的第一種方式");
}
}
public class ThreadDemo1{
public static void main(String[] args) {
Thread t=new MyThread();
//start方法會在作業系統中真的創建出一個執行緒來(在內核中創建新的pcb,加入到雙向鏈表中)
t.start();
}
}
->繼承Thread類,重寫run方法,使用匿名內部類
package 執行緒;
//
public class TestDemo4{
public static void main(String[] args) {
Thread t=new Thread(){
@Override
public void run() {
//依然回圈列印,每次間隔1秒
while(true){
System.out.println("第二種創建執行緒的方式");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
//運行執行緒
t.start();
}
}
->實作Runnable介面,重寫run方法
package 執行緒;
class MyRunnable implements Runnable{
@Override
public void run() {
//方法run又叫做執行緒體,里面存放執行緒具體要執行的任務
//這里我們讓該執行緒回圈列印 每次列印間隔1秒
while(true){
System.out.println("第3種創建執行緒的方式");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadDemo3{
public static void main(String[] args){
//此處把Runnable實體作為引數傳給Thread
Thread t=new Thread(new MyRunnable());
t.start();//執行執行緒
}
}
->實作Runnable介面,重寫run方法,使用匿名內部類
package 執行緒;
public class TestDemo5{
public static void main(String[] args) {
Thread t=new Thread(new Runnable() {
//注意:是將Runnable一個整體放入了Thread后面的括號中
@Override
public void run() {
while(true){
System.out.println("第4種創建執行緒的方式");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
t.start();
}
}
->使用lambda運算式
package 執行緒;
public class TestDemo6{
public static void main(String[] args) {
Thread t=new Thread(()->{
while(true){
System.out.println("第5種創建執行緒的方式");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
}
}
行程、執行緒的區別(面試重點)
- 本質:行程是系統分配資源的基本單位,執行緒是系統調度的基本單位,
- 包含性:行程和執行緒之間是包含的關系,每個行程中至少含有一個執行緒,即主執行緒,
- 資源共享方面:同一個行程中的若干執行緒共享該行程中的所有資源,而行程與行程之間不共享資源,
- 開銷:執行緒的調度比行程快很多,執行緒的創建和銷毀所帶來的開銷也比較小,
- 健壯性:行程的健壯性較強,在多行程環境中,一個行程崩掉,其他行程不受影響,而在一個行程的多個執行緒中,一個執行緒崩了,其他執行緒也會全部崩潰,
- 執行:執行緒與行程都可并發執行,但行程在執行時有一套全面的流程,有程式的入口、出口、中間程序等,而執行緒沒有,執行緒只能依附與行程的應用程式之中,
| 關注不迷路,后續更精彩~ |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/357109.html
標籤:其他
上一篇:資料結構——順序表的實作
