java多線程2-總結

進程:是一個正在執行中的程序,
       每一個上進程執行都有一個執行順序,順序是一個執行路徑,或者叫一個控制單元.
線程:就是進程中的一個獨立的控制單元.
       線程在控制着進程的執行.
      一個進程中至少有一個線程.java

java VM啓動的地時候會有一個進程java.exe ,該進程中至少一個線程負責java程序的執行.並且這個線程運行的代碼在於main方法中.該線程就是主線程main安全

jvm啓動不止一個線程,還有負責GC的線程多線程

多線程就一個目的,多段代碼同時執行.相要多段代碼同時執行時就用多線程jvm

java多線程2—建立線程ide

/**
 * 建立線程的線種方式一,繼承Thread,重寫run方法
 */
public class Test03 {

    public static void main(String[] args) {
        //這是建立一個線程,會有一個獨立的線程內存空間
        ThreadDemo demo = new ThreadDemo();
        // 使該線程開始執行;Java 虛擬機調用該線程的 run 方法。
        demo.start();
    }
}
/**
 * 定義一個線程類,(就是繼承Thread)
 * Override run方法.run方法中的代碼就是這個線程要執行的代碼.(線程體)
 */
class ThreadDemo extends Thread{
    @Override
    public void run() {
        System.out.println("一個線程");
    }
}

java多線程3-線程的幾種狀態this

1,被建立—start()—運行—sleep(time)—>凍結spa

                               -->wait() -->凍結線程

                                  notify<--    code

2,阻塞狀態.--等待執行權,有執行權對象

 

3,凍結-放棄了執行權,

4,消亡狀態.

java多線程3-Thread類認識

獲取線程對象及名稱

線程的默認名稱Thread-編號.編號從0開始.

1,getName()方法獲得線程名.

2,setName()設置線程名稱.

在構造方法方中給線程設置名字

class Test extends Thread{
    //構造方法中,設置線程名字.
    Test(Stirng name){
    //能夠直接super()由於父類中已定義
       super(name)
    }
    public void run(0{
      //TODO
    }
}

 

static curentThread():至關於線程中this.獲取當前線程對象.靜態的

線程狀態異常

同一個線程屢次.start(),一個線程已是在運行了,在去調用start().就是IllegalThreadStateException()

java多線程4-建立線程2

第二種建立線程的方法,實現Runnabl接口.

/**
 * 建立線程的第二種方法
 */
public class Test03 {

    public static void main(String[] args) {
        //這裏並無建立線程,只是定義的一個Runnable的子類.
        ThreadDemo demo = new ThreadDemo();
        //這裏纔是建立了4個線程
        Thread t1 = new Thread(demo);
        Thread t2 = new Thread(demo);
        Thread t3 = new Thread(demo);
        Thread t4 = new Thread(demo);
        //這樣才能夠同時開啓多線程執行同一代碼.
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
/**
 * 實現Runnable接口,Runnable接口只有一個抽象的run方法.
 */
class ThreadDemo implements Runnable{
    @Override
    public void run() {
        System.out.println("一個線程");
    }
}

Runnable接口的定義就是爲了規範線程要執行的代碼的存入的位置.(就是run方法)

注意:run方法中的異常只能try,

 

多線程中明確的幾點:

1,明確哪些代碼是多線程運行代碼.

2,明確共享數據

3,明確多線程行動代碼中哪些語句操做共享數據的.

 

java多線程5-鎖

1,同步方法用的是this對象,靜態方法同步用的是Class對象

2,死鎖:同步中嵌套同步,兩個同步的鎖確不一樣.

3,線程訪問共享數據的安全,因此要用鎖.

java多線程6-線程等待與喚醒

1,線程運行的時候內存中會創建一個線程池,等待線程都在存在這個線程池中notify()喚醒的通常線程池中第一個等待的線程

wait(),notify(),notifyAll()都使用在同步中,由於要對持有的鎖的線程操做.

只有同一個鎖上的被等待線程,能夠被同一個鎖上的線程notify喚醒

也就是:等待和喚醒必須是同一個鎖.

 

在多線程的時候要注意兩點,

1,循環判斷標記--所要用while

2,還要喚醒對方線程,也就是要通知的線程,用notifyAll()喚醒全部.爲了不全部線程都wait().不過用notifyall()也有一個缺點會喚醒本方線程.

 

java多線程7-JDK1.5以後

1,顯示的鎖機制.Lock裏面的lock和nulock

2,Object中的wati,notify,notifyAll 替換了Condition對象.

3,該對象能夠Lock進行獲取,能夠實現本方線程只喚醒方線程

java多線程7-線程的中止

1,中止線程只有一個種方法,那就是run方法結束.

2,開啓多線程,一般都要用循環結構.(你不用循環的話,就在一個線程裏面跑得了,反正你run方法就那幾行代碼,運行完了還不是單線程)

3,因此只要控制好循環就能夠,控制好線程何時結束.

interrupt()—這個方法,是中斷線程.就是清除線程的凍結狀態.讓線程運行下去,把run方法運執行完.而後結束線程.

會拋出InterruptException

其它方法:

jion方法--等待該線程結束.在A線程是指使B線程去調用jion方法,那麼A線程就會等到B線程結束後在去運行.

setDaemon(true)--那個線程調用這個方法,那麼這個線程就會變成後臺線程(守護線程).可是不知道它守護那個線程.

yield()--暫停當前正在執行的線程對象,並執行其它線程.

相關文章
相關標籤/搜索