Thread設計中的模板模式

我們知道,在實際使用線程的時候,真正的執行邏輯都是寫在run方法裡面,run方法是線程的執行單元,如果我們直接使用Thread類實現多線程,那麼run方法本身就是一個空的實現,如下:

thread中run方法

thread中start實現如下:

thread中的start方法

thread中的run和start是一個比較典型的模板模式,算法結構交由父類實現,具體的邏輯細節交由子類實現。下面按照thread的run和start方式來實現一個簡單的小demo,幫助大家理解。

模板模式代碼定義

<code>/** * @description: 輸出用戶輸入的字符串信息,類似於thread中的start() * @auther: WEIQI * @date: 2019-12-17 0:56 * @param inputString 用戶輸入字符串 */ public final void outputString(String inputString) { System.out.println("*******************"); userInput(inputString); System.out.println("*******************"); System.out.println(); } /** * @description: 暴露給繼承類的方法,類似於thread中的run() * @auther: WEIQI * @date: 2019-12-17 0:57 * @param inputString 用戶輸入字符串 */ protected void userInput(String inputString) { }/<code>

模板模式使用

<code>/** * @description: 編寫簡單的測試功能模塊 * @auther: WEIQI * @date: 2019-12-17 0:58 */ public static void main(String[] args) { // 對象引用1,類似於創建一個線程 TemeplateMethod temeplateMethod1 = new TemeplateMethod(){ @Override protected void userInput(String inputString) { System.out.println(inputString); } }; // 第一個引用調用算法封裝方法,類似於線程調用start()方法 temeplateMethod1.outputString("user1 input data"); // 對象引用2,類似於創建另外一個線程 TemeplateMethod temeplateMethod2 = new TemeplateMethod(){ @Override protected void userInput(String inputString) { System.out.println(inputString); } }; // 第二個引用調用算法封裝方法,類似於線程調用start()方法 temeplateMethod2.outputString("user2 input data"); }/<code>

上面代碼代碼大家可以拷貝到自己電腦上測試。

運行結果:

所有博文都在公眾號《編程之藝術》中收集!想了解的大佬可以關注關注。