1. 程式人生 > 實用技巧 >vue的原生事件繫結流程

vue的原生事件繫結流程

多執行緒

  • 建立執行緒方式1:繼承Thread類,重寫run()方法,呼叫start開啟執行緒

  • 建立執行緒方式2:實現runnable介面,重寫run方法,執行執行緒需要丟入runnable介面實現類,呼叫start方法

  • 注意:執行緒開啟不一定立即執行,由CPU排程執行

Thread.start()執行緒開啟

Thread.sleep(100) 模擬延時

Thread.currentThread().getName() 當前執行緒

靜態代理

真實物件和代理物件都要實現同一個介面

代理物件要代理真實角色

好處

代理物件可以做很多真實物件做不了得事情

真實物件專注做自己得事情

lambda表示式

  • 理解Functional interface(函式式介面) 是學習java8 lambda表示式的關鍵所在。

  • 為什麼要使用lmabda表示式

    • 避免匿名內部類定義過多

    • 可以讓你的程式碼看起來很簡潔

  • 函式式介面的定義

    • 任何介面,如果只包含唯一一個抽象方法,那麼它就是一個函式式介面

    • 對於函式式介面,我們可以通過lambda表示式來建立該介面的物件

  • labda表示式總結:

    • lambda表示式只能有一行程式碼的情況下才能簡化成為一行,如果有多行,那麼就用程式碼快包裹

    • 前提是介面為函式式介面

    • 多個引數化也可以去掉引數型別,要去掉就都去掉,必須加上括號

執行緒休眠

  • sleep(時間)指定當前執行緒阻塞的毫秒數;

  • sleep存在異常InterruptedException;

  • sleep時間達到後執行緒進入就緒狀態;

  • sleep可以模擬網路延時,倒計時等

  • 每一個物件都有一把鎖,sleep不會釋放鎖

執行緒禮讓

Thread.yield();

當執行緒執行的時候碰到Thread.yield();就會先退出來進入就緒狀態,讓另一個執行緒先跑。

注意:禮讓有時候不一定能成功,看CPU心情

Join

  • join合併執行緒,待此執行緒執行完成後,在執行其他執行緒,其他執行緒阻塞

執行緒的狀態

new - 就緒狀態 - 阻塞狀態 或者 執行狀態 - dead 有五個狀態

執行緒中斷或者結束,一旦進入死亡狀態,就不能再次啟動

執行緒優先順序

  • 現成的優先順序用數字表示,範圍從1-10,預設是5

    • //放置優先權
      .setPriority(3)
      // 表示最大的 10
      .setPriority(Thread.MAX_PRIORITY);
      //表示最小的1
      setPriority(Thread.MIN_PRIORITY);
    • //得到優先權,可以顯示出幾級
      Thread.currentThread().getPriority()
  • 注意

    • 優先順序低只是意味著獲得排程的概率低,並不是優先順序低就不會被呼叫了,這都是看CPU的排程

守護執行緒

  • 執行緒分為使用者執行緒和守護執行緒

  • 虛擬機器必須確保使用者執行緒執行完畢

  • 虛擬機器不用等待守護執行緒執行完畢

     //守護執行緒 
    .setDaemon(true);

執行緒同步

  • 由於同一程序的多個執行緒共享同一塊儲存空間,在帶來方便的同時,也帶來了訪問衝突問題,為了保證資料在方法中被訪問時的正確性,在訪問時加入鎖機制 synchronized,當一個執行緒獲得物件的排他鎖,獨佔資源,其他執行緒必須等待,使用後釋放鎖即可,存在以下問題:

    • 一個執行緒持有鎖會導致其他所有需要此鎖的執行緒掛起;

    • 在多執行緒競爭下,加鎖,釋放鎖會導致比較多的上下文切換和排程延時,引起效能問題;

    • 如果一個優先順序高的執行緒等待一個優先順序低的執行緒釋放鎖 會導致優先順序倒置,引起效能問題。

  • synchronized 同步方法 鎖的物件就是變化的量,需要增刪改的物件

同步塊

死鎖

  • 多個執行緒各自佔有一些共享資源,並且互相等待其他執行緒佔有的資源才能執行,而導致兩個或則多個執行緒都在等待對方釋放資源,都停止執行的情形。某一個同步塊同時擁有“兩個以上物件的鎖”時,就不會發生“死鎖”的問題

死鎖避免方法

  • 產生死鎖的四個必要條件:

    1. 互斥條件:一個資源每次只能被一個程序使用。

    2. 請求與保持條件:一個程序因請求資源而阻塞時,對已獲得的資源保持不放。

    3. 不剝奪條件:程序以獲得的資源,在未使用完之前,不能強行剝奪。

    4. 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。

    上列出了死鎖的4個必要條件,只要破其中一個或多個就可以避免死鎖發生

執行緒通訊

wait() :表示執行緒一直等待,直到其他執行緒通知,與sleep不同,會釋放鎖

notifyAll() :喚醒同一個物件上所有呼叫wait()方法的執行緒,優先級別高的執行緒優先排程

執行緒池

  • 好處:

    1. 提高響應速度(減少了建立新執行緒的時間)

    2. 降低資源消耗(重複利用執行緒池中執行緒,不需要每次都建立)

    3. 便於縣執行緒管理

    使用執行緒池

    • ExecutorService:真正的執行緒池介面。常見子類ThreadPoolExecutor

      • void execute(Runnable command):執行任務/命令,沒有返回值,一般用來執行Runnable

      • <T>Future<T>submit(Callable<T>task):執行任務,有返回值,一般用來執行Callable

      • void shutdown():關閉執行緒池

    • Executors:工具類、執行緒池的工廠類,用於建立並返回不同型別的執行緒池

    //執行緒池
    public class Test13 {
    public static void main(String[] args) {
    //1.建立服務,建立執行緒池
    //.newFixedThreadPool(10); 引數為執行緒池的大小
    ExecutorService service = Executors.newFixedThreadPool(10);
    //執行緒池啟動服務
    service.execute(new MyThread());
    service.execute(new MyThread());
    //2.關閉連結
    service.shutdown();
    }
    }
    class MyThread implements Runnable{
    @Override
    public void run() {
    System.out.println(Thread.currentThread().getName());
    }
    }