線程與進程

1、線程和進程的概念多線程

(1)進程概念併發

進程就是正在執行的程序,一個進程一般就是一個正在執行的應用程序。進程就是一個可執行程序一次運行的過程,它是系統進行資源分配和調度的一個獨立單位。ide

 

(2)線程概念函數

線程是程序中的一個執行流,每一個線程都有本身的專有寄存器(棧指針、程序計數器等),但代碼區是共享的,即不一樣的線程能夠執行一樣的函數(不一樣的線程有可能用一樣的數據或方法)。this

 

(3)進程和線程的關係spa

a.一個線程只能屬於一個進程,而一個進程能夠有多個線程,但至少有一個主線程,其餘的線程都是由主線程去建立和啓動的。線程

b.系統資源分配給進程,同一個進程的全部線程共享該進程的全部資源;指針

c.線程是指進程內的一個執行單位,也是進程內的可調度實體;code

 

 

2、多線程blog

 (1)多線程概念

多線程是指程序中包含多個執行流,即在一個程序中能夠同時運行多個不一樣的線程來執行不一樣的任務,也就是說容許單個程序建立多個並行執行的線程來完成各自的任務。(即同一時間執行多任務)。須要執行併發任務才須要用到多線程。

 

(2)多線程好處

a.Java支持編寫多線程的程序;

b.多線程最大好處在於能夠同時併發執行多個任務;

c.多線程能夠最大限度地減低CPU的閒置時間,從而提升CPU的利用率

 

(3)多線程的不利方面

a.線程也是程序,因此線程須要佔用內存,線程越多佔用內存也越多;

b.多線程須要協調和管理,因此須要CPU時間跟蹤線程;

c.線程之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題;

d.線程太多會致使控制太複雜,最終可能形成不少bug,甚至會形成死鎖;

 

3、Java中的線程

(1)Java中的主線程

任何一個Java程序啓動時,一個線程馬上運行,它執行main方法,這個線程稱爲線程的主線程,也就是說任何Java程序都至少有一個線程,即主線程;主線程的特殊之處在於:

a.它是產生其餘線程子線程的線程;

b.一般它必須最後結束,由於執行其餘子線程的關閉工做;

 

(2)Java建立線程的兩種方法

a.繼承Thread類的方式

b.實現Runnable接口的方式

 

(3)自定義線程----繼承Thread方法

a.在Java中要實現線程,最簡單的方式就是擴展Thread類,重寫其中的run方法,方法原型以下:

public void run();

b.Thread類中的run方法自己並不執行任何操做,若是咱們重寫了run方法,當線程啓動時,它將執行run方法

c.Thread類也實現了Runnable接口

繼承Thread類例子:

//定義
public class MyThread extends Thread{
    public void run(){
        ......
    }
}
//調用
MyThread thread = new MyThread();
thread.start();

 

(4)線程簡單例子

a.繼承Thread類的方式

package com.Thread.Demo;

public class MyPrinterThread extends Thread{
    public MyPrinterThread(String name) {
        super(name);
    }
    private int x = 0 ;
    public void run(){
        for (int i = 0; i < 100; i++) {
            System.out.println(this.getName()+":"+"x="+ x);
            x++;
        }
    }
}

 

package com.Thread.Demo;

public class ThreadTest {
    
    public static void main(String[] args) {
        MyPrinterThread T1 = new MyPrinterThread("Thread1");
        MyPrinterThread T2 = new MyPrinterThread("Thread2");
        T1.start();
        T2.start();
    }

}

 

b.實現Runnable接口的方式

package com.Thread.Demo;

public class PrinterRunable implements Runnable{
    
    private int x = 100 ;
    
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+":"+"x="+x);
            x--;
        }
    }
}

 

package com.Thread.Demo;

public class RunableTest {
    
    public static void main(String[] args) {
        PrinterRunable pr1 = new PrinterRunable();
        PrinterRunable pr2 = new PrinterRunable();
        Thread t1 = new Thread(pr1, "Thread1");
        Thread t2 = new Thread(pr2, "Thread2");
        //設置線程的優先級
        t1.setPriority(1);
        t2.setPriority(10);
        t1.start();
        t2.start();
    }

}

 

(5)線程經常使用方法

a.設置線程的優先級

Thread t = new Thread();
t.setPriority(1);

b.

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息