Java基礎二十二

來源:互聯網
上載者:User

標籤:catch   extends   ring   col   守護線程   bool   err   路徑   1.3   

1 多線程的概述1.1 進程
  • 就是正在啟動並執行程式。是系統進行資源分派和調度的獨立單位。每一個進程都有其自己的記憶體空間和系統資源。
1.2 多進程的意義?
  • 單進程的電腦只能做一件事情,而我們現在的電腦可以做多件事情。例如:一邊玩遊戲,一邊聽音樂。
  • 現在的電腦都支援多進程的,就可以一個時間段內執行多個任務,並且可以提高CPU的使用率。
1.3 線程
  • 在一個進程內又可以執行多個任務,而這每一個任務我們就可以看成是一個線程。
  • 線程是進程的執行單元(執行路徑)。
  • 單線程:如果程式有一條執行路徑。
  • 多線程:如果程式有多條執行路徑。
1.4 多線程的意義?
  • 多線程的存在,不是提高程式的執行速度。其實是為了提高應用程式的使用率。
  • 程式的執行其實都是在搶CPU的資源,即CPU的執行權。
  • 多個進程是在搶這個資源,而其中的某一個進程如果執行路徑比較多的話,就有更高的幾率搶到CPU的執行權。
  • 線程的執行具有隨機性。
1.5 Java程式的運行原理
  • Java命令會啟動Java虛擬機器,啟動JVM,等於啟動了一個進程。 該進程會自動啟動一個主線程,然後由主線程去調用某個類的main方法,所以main方法運行在主線程中的。
  • JVM啟動至少啟動了記憶體回收線程和主線程,所以是多線程的。

 

2 多線程的實現方案2.1 多線程的實現方案一
  • 步驟:
  • ①建立一個類去繼承Thread類。
  • ②該子類去重寫run()方法。
  • ③建立該子類的對象。
  • ④啟動線程

 

  • 樣本:
package com.xuweiwei;/** * 多線程的實現: *  由於線程是依賴進程而存在的,所以我們應該先建立一個進程出來。 *  而進程是由系統建立的,所以,我們應該去調用系統功能去建立一個進程。 *  Java是不能直接帶哦用系統功能的,所以,我們沒有辦法直接實現多線程程式。 *  但是,Java是可以調用C或C++寫好的程式去實現多線程程式。 *  由C或C++去調用系統功能建立進程,然後由Java去調用這樣的東西,然後提供一些API供我們使用。這樣,我們就可以實現多線程程式了。 */public class MyThread extends Thread {    @Override    public void run() {        for (int i = 0; i < 10; i++) {            System.out.println(Thread.currentThread().getName()+"= " + i);        }    }}
package com.xuweiwei;public class MyThreadTest {    public static void main(String[] args) {        MyThread t1 = new MyThread();        t1.start();        MyThread t2 = new MyThread();        t2.start();    }}
2.2 擷取線程對象的名稱和設定線程對象的名稱
  • 方法:返回該線程的名稱
public final String getName()
  • 方法:設定線程的名稱
public final void setName(String name)
  • 方法:返回當前正在執行的線程對象的引用
public static Thread currentThread()

 

  • 樣本:無參構造方法+setName
package com.xuweiwei;public class MyThread extends Thread {    @Override    public void run() {        for (int i = 0; i < 10; i++) {            System.out.println(Thread.currentThread().getName()+"= " + i);        }    }}
package com.xuweiwei;public class MyThreadTest {    public static void main(String[] args) {        MyThread t1 = new MyThread();        MyThread t2 = new MyThread();        //設定線程的名字        t1.setName("t1");        t2.setName("t2");        t1.start();        t2.start();    }}

 

  • 樣本:有參構造方法
package com.xuweiwei;public class MyThread extends Thread {    public MyThread() {    }    public MyThread(String name) {        super(name);    }    @Override    public void run() {        for (int i = 0; i < 10; i++) {            System.out.println(Thread.currentThread().getName()+"= " + i);        }    }}
package com.xuweiwei;public class MyThreadTest {    public static void main(String[] args) {        MyThread t1 = new MyThread("t1");        MyThread t2 = new MyThread("t2");        t1.start();        t2.start();    }}

 

  • 樣本:擷取main方法所在的線程對象的名稱
package com.xuweiwei;public class MyThreadTest {    public static void main(String[] args) {        System.out.println(Thread.currentThread().getName());    }}
2.3 線程的控制
  • 方法:線程睡眠
public static void sleep(long millis)  throws InterruptedException
  • 方法:join線程,等待該線程終止
public final void join() throws InterruptedException
  • 方法:線程禮讓即暫停當前的正在執行的線程對象,並執行其他線程。
public static void yield()
  • 方法:守護線程
public final void setDaemon(boolean on)
  • 方法:中斷線程
public void interrupt()

 

  • 樣本:
package com.xuweiwei;public class MyThread extends Thread {    @Override    public void run() {        for (int i = 0; i < 10; i++) {            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println(Thread.currentThread().getName()+"= " + i);        }    }}

 

  • 樣本:
package com.xuweiwei;public class MyThread extends Thread {    @Override    public void run() {        for (int i = 0; i < 100; i++) {            System.out.println(Thread.currentThread().getName() + "= " + i);        }    }}
package com.xuweiwei;public class MyThreadTest {    public static void main(String[] args) {        MyThread t1 = new MyThread();        MyThread t2 = new MyThread();        MyThread t3 = new MyThread();        t1.setName("李淵");        t2.setName("李建成");        t3.setName("李世民");        t1.start();        try {            t1.join();        } catch (InterruptedException e) {            e.printStackTrace();        }        t2.start();        t3.start();    }}

 

  • 樣本:
package com.xuweiwei;public class MyThread extends Thread {    @Override    public void run() {        for (int i = 0; i < 100; i++) {            System.out.println(Thread.currentThread().getName() + "= " + i);            Thread.yield();        }    }}
package com.xuweiwei;public class MyThreadTest {    public static void main(String[] args) {        MyThread t1 = new MyThread();        MyThread t2 = new MyThread();        MyThread t3 = new MyThread();        t1.setName("李淵");        t2.setName("李建成");        t3.setName("李世民");        t1.start();        t2.start();        t3.start();    }}

 

  • 樣本:
package com.xuweiwei;public class MyThread extends Thread {    @Override    public void run() {        for (int i = 0; i < 100; i++) {            System.out.println(Thread.currentThread().getName() + "= " + i);            Thread.yield();        }    }}
package com.xuweiwei;public class MyThreadTest {    public static void main(String[] args) {        MyThread t2 = new MyThread();        MyThread t3 = new MyThread();        t2.setName("李建成");        t3.setName("李世民");        t2.setDaemon(true);        t3.setDaemon(true);        t2.start();        t3.start();        Thread.currentThread().setName("李淵");        for (int i = 0; i < 3; i++) {            System.out.println(Thread.currentThread().getName()+"= " + i);        }    }}
2.4 線程的生命週期
  • 建立:建立線程對象。
  • 就緒:有執行資格,但是沒有執行權。
  • 運行:有執行資格,有執行權。
  • 阻塞:由於一些操作,讓線程處於該狀態。沒有執行資格,沒有執行權。
  • 死亡:線程對象對象變成垃圾,等待被回收。

 

2.5 多線程的實現方式二
  • 步驟:

 

 

 

 

 

3 線程調度和線程式控制制

 

4 線程生命週期

 

5 死結

 

6 線程間通訊

 

7 定時器的使用

Java基礎二十二

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.