1. 程式人生 > >自定義Thread類中run()方法,super().run 的理解

自定義Thread類中run()方法,super().run 的理解

當我們重寫Thread類中的run方法時,經常會看到這樣的程式碼:

    public void run() {
        super.run();
        System.out.println(Thread.currentThread().getName());
    }

 這個super() 到底有什麼用呢?先看一下 Thread 類中的實現:

    private Runnable target;

    public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

從上圖我們可以分析出,利用Thread類中的建構函式,我們可以自己實現Runnable介面,使用 Thread(Runnable target)建構函式重寫run()方法,來實現我們需要的功能。那麼,將這個super() 寫入我們自己的MyThread又有什麼作用呢?

public class MyThread extends Thread {

    MyThread(Runnable runnable) {
        super(runnable);
    }

    public void run() {
        super.run();
        System.out.println(Thread.currentThread().getName());
    }
}

我們給自己實現的MyThread類中加入可接受runnable的建構函式,並實現Runnable介面列印當前執行緒(與MyThread的列印一致),進行程式碼測試:

public class MyThreadTest {

    public static void main(String[] args ) {
        Runnable runnable = new MyRunnable();
        MyThread myThread = new MyThread(runnable);
        myThread.start();
        System.out.println(Thread.currentThread().getName());
    }
}

測試結果如下:

main
Thread-0
Thread-0

可見,MyRunnable 中的 run() 和 MyThread 類中的 run()處於同一執行緒,兩個函式均會執行。

相關推薦

定義Threadrun()方法super().run理解

當我們重寫Thread類中的run方法時,經常會看到這樣的程式碼: public void run() { super.run(); System.out.println(Thread.currentThread().getName(

3.定義返回json格式的數據給前臺(定義Controller的Json方法

mes eth lose rtu http 容易出錯 結果 execute hide 在mvc的項目中,我們前臺做一些操作時,後臺要返回一些結果給前臺,這個時候我們就需要有一個狀態來標識到底是什麽類型的錯誤,   例如:     執行刪除的時候,如果操作成功(1行受影響

WebForm.aspx 頁面通過 AJAX 訪問WebForm.aspx.cs方法獲取數據(轉)

html ref doc tran jquery helper event query sender WebForm.aspx 頁面通過 AJAX 訪問WebForm.aspx.cs類中的方法,獲取數據 WebForm1.aspx 頁面 (原生AJAX請求,寫法一) &l

定義控制元件draw()方法基線的計算

Canvas.drawText(String text, float x, float y,Paint paint)方法 第一個引數 text 是需要繪製的文字 第二個引數 x 是文字開始的位置 第三個引數 y 是基線的位置 第四個引數 paint 傳畫筆 其中第三個引數基線的位置計算方

《C++第九周實驗報告3-1》----接第8周任務3定義分數運算子過載實現分數的輸入輸出

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱: CFraction.cpp *

使用Velocity(VTL)呼叫定義C# .net 方法

最近在做一個專案,專案裡面使用了VTL模板,用起來還是很方便,這裡給記錄一下用vtl呼叫.net中自定義的方法,高手就不要往下看了,呵呵. 例如我要在模板中呼叫這樣的一個方法,程式碼如下: 名稱空間:XINLG.Web._codes.manage.site._

20190112-定義實現字串的操作方法如strip,upper,title,ljust,center,zfill,find,rfind等

1:自定義實現strip()Python strip() 方法用於移除字串頭尾指定的字元(預設為空格或換行符)或字元序列演算法:strip()僅移除首尾的指定字元,不能移除中間的先從首部開始移除 def customerize_strip(s,value=' '): result =''

Java可以直接呼叫靜態方法不用例項化

轉載自   http://stevengw.blog.163.com/blog/static/583447512012319112140126/ 先通俗的分析下,我們把類看作是一個房子。房子裡面有傢俱,桌椅板凳之類的,房子裡面還有人。 房子裡面所有的人都應該是共有一套傢俱

asp.net使用者定義控制元件呼叫另外一個使用者定義控制元件方法

昨天同事問我一個問題,說是在一個頁面中有二個使用者自定義控制元件,他現在想在其中一個使用者自定義控制元件中呼叫另外一個使用者自定義控制元件的一個方法。當時感覺很奇怪,為什麼要這樣呢。可是他說他要完成這樣一個功能,所以我就簡單的用一個反射的功能來完成它。試了一下,還行功能可以實

多執行緒實現方式1:定義一個繼承Thread並重寫run方法

/** * 多執行緒實現方式1: * 自定義一個類,繼承Thread類,並重寫run方法。 * 執行緒同時執行。 * @author jiaxutianhuo * */ public cl

系統擴展方法實現對所有或某種類擴展定義方法

系統 方法 extension lis empty sem sta 實現 .... 擴展方法的格式: 1、必須把擴展方法寫在靜態類中 2、擴展方法的第一個參數必須加 "this" 修飾 例如,對所有object對象的擴展方法IsEmptyOrNull,判斷對象是否為空,ob

靜態內部類定義任何方法用static定義

static sys 需要 有一個 out col 定義 pub 不可 靜態內部類:(註意:前三種內部類與變量類似,所以可以對照參考變量) 靜態內部類定義在類中,任何方法外,用static定義。 靜態內部類只能訪問外部類的靜態成員。 生成(new)一個靜態內部類不需要外部類

[Xcode10 實際操作]九、實用進階-(19)重寫父的繪圖方法使用圖形上下文繪製定義圖形

本文將演示如何使用圖形上下文,繪製自定義圖形。 使用快捷鍵【Command】+【N】建立一個新的類檔案。 (在專案資料夾【DemoApp】上點選滑鼠右鍵【New File】建立) ->【Cocoa Touch Class】->【Next】-> 【Class】:QuartzView。輸

Mybatis需要返回的資料引數在資料表沒有對應的欄位定義實體和resultmap作為返回值型別

自定義實體類:因為需要做相關記錄的統計,而表中沒有統計欄位 public class TrafficJeevesDistrictCount { //施工top5+1 按區域 private String districtInfo; private

springmvc在處理請求過程出現異常資訊交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常型別自定義異常類,這裡我們建立一個自定義系統異常如果controller、service、dao丟擲此類異常說明是系統預期處理的異常資訊。

springmvc在處理請求過程中出現異常資訊交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。 1.1 異常處理思路 系統中異常包括兩類:預期異常和執行時異常RuntimeException,前者通過捕獲異常從而獲取異常資訊,後者主要通過規範程式碼開發、測試通過手段減少執

springmvc在處理請求過程出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常自定義異常類,這裏我們創建一個自定義系統異常如果controller、service、dao拋出此類異常說明是系統預期處理的異常信息。

ansi req -type this spring 進行 name ext code springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。 1.1 異常處理思路 系統中異常包括兩類:預期異常和運行時異常Ru

WPF定義控制元件使用了RadioButton後多次使用該控制元件出現的死迴圈解決方法

最近在專案中需要用到RadioButton,所以在自定義控制元件中使用了一組RadioButton,使用一個預設的groupname,也就是這個goupname給後來的問題埋下了地雷。 定義大致如下: <Grid> <Label Height ="50" W

執行緒的兩種建立方式:Thread和Runnable介面它們都要複寫run方法

/*執行緒: * 1.如何在自定義的程式碼中,自定義一個執行緒呢? * * 通過對API的查詢,java已提供了對執行緒這類事物的描述。就是Thread類 * * 建立執行緒的第一種方式:繼承Thread類。 * 步驟: * 1.定義類繼承Thread。

實驗報告:(1)合理定義一個三角形Triangle成員屬性包括3條邊能否構成三角形的標誌;成員方法包括構造方法、修改3條邊、計算面積。 (2)寫一測試類,測試自定義三角形Triangle是否正

(1)合理定義一個三角形類Triangle,成員屬性包括3條邊,能否構成三角形的標誌;成員方法包括構造方法、修改3條邊、計算面積。(2)寫一測試類,測試自定義三角形類Triangle是否正確。class Triangle_D{ private double f_edge;

Android 定義Dialog並在Activity實現按鈕監聽。

實際開發中,經常會用到Dialog,比如退出時候會彈出是否退出,或者還有一些編輯框也會用Dialog實現,效果圖如下: 開發中遇到的問題無非在於如果在Activity中監聽這個Dialog中實現的按鈕,Dialog類如下,在MyDialog這個類中實現了一個LeaveMyDialogLi