1. 程式人生 > >Thread和Runnable之間的關係

Thread和Runnable之間的關係

public class Thread implements Runnable{

  private Runnable target;

//Thread實現Runnable介面,但是並沒有完全實現run() 方法,此方法是Runnable子類完成的,所以如果繼承Thread就必須覆寫run方法

@Override

 public void run(){

  if(!target != null){

    target.run();

  }

 }

}

---------------------------------------Runnable 介面---------------------------

public interface Runnable{

  public abstract void run();

}

===================================================================================

一個類繼承Thread,不適合多個執行緒共享資源,實現Runnable介面,可以方便實現資源共享

因為一個執行緒只能啟動一次,通過Thread實現執行緒時,執行緒和執行緒所要執行的任務是捆綁在一起的。也就使得一個任務只能啟動一個執行緒,不同的執行緒執行的任務是不相同的,所以沒有必要,也不能讓兩個執行緒共享彼此任務中的資源。

一個任務可以啟動多個執行緒,通過Runnable方式實現的執行緒,實際是開闢一個執行緒,將任務傳遞進去,由此執行緒執行。可以例項化多個 Thread物件,將同一任務傳遞進去,也就是一個任務可以啟動多個執行緒來執行它。這些執行緒執行的是同一個任務,所以他們的資源是共享。

兩種不同的執行緒實現方式本身就決定了其是否能進行資源共享。

任何執行緒生命週期: 建立(建構函式 Thread td = new Thread())——就緒(執行緒佇列)—執行(cpu排程,獲取處理器資源)——阻塞(正常執行時,sleep,suspend,wait()或者處理時間長,不能進入排隊佇列,只有阻塞原因消失才能進入排隊佇列進入就緒狀態)——死亡(stop或者run函式執行結束,不具有繼續執行能力)

主執行緒有可能比其他執行緒先執行完,因為執行緒操作的不確定性,所以主執行緒有可能最先執行完,那麼其他執行緒不會受到任何影響,並不會隨著主執行緒的消失而消失

class MyThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(Thread.currentThread().getName() + "i:" + i);
}
}
}


public class ThreadAliveDemo extends Thread {


public static void main(String[] args) {
Runnable re = new MyThread();
Thread td = new Thread(re, "執行緒:");
System.out.println("執行緒啟動之前:" + td.isAlive());
td.start();
System.out.println("執行緒啟動之後:" + td.isAlive());
for (int i = 0; i < 3; i++) {
System.out.println("main執行:" + i);
}
        System.out.println("程式碼執行之後:" + td.isAlive());
}
最後不確定,可能false,可能true

}

相關推薦

ThreadRunnable之間關係

public class Thread implements Runnable{   private Runnable target; //Thread實現Runnable介面,但是並沒有完全實現run() 方法,此方法是Runnable子類完成的,所以如果繼承Thread

Thread Runnable區別

tool 邏輯 method 自己的 當我 行為 接口實現 線程的創建 多線程 Java中線程的創建有兩種方式: 1. 通過繼承Thread類,重寫Thread的run()方法,將線程運行的邏輯放在其中 2. 通過實現Runnable接口,實例化Thread類

Java - Thread Runnable實現多線程

abs java jdk1 public adt system 轉載 作用 final Java多線程系列--“基礎篇”02之 常用的實現多線程的兩種方式 概要 本章,我們學習“常用的實現多線程的2種方式”:Thread 和 Runnable。之所以說是常用的,是因為通

並發編程之多線程基礎-ThreadRunnable的區別及聯系(二)

共享 聯系 star 沒有 static unable end 需要 read 上篇文章講述了創建線程的常用方式 本篇主要分析一下Thread和Runnable兩種方式創建線程的區別及聯系 聯系: ?Thread類實現了Runable接口。 ?都需要重寫裏面Run方

java 多執行緒學習(Java中Thread Runnable的區別)

今天剛學習java多執行緒 在網上查了幾篇博文學習,個人覺得寫的不錯,但是有的地方有個疑問:Java中Thread 和 Runnable的區別。 然後,在網上查詢相關資料,發現幾乎都是一樣的。 下面貼出相關的程式碼: 如果一個類繼承Thread,則不適合資源共享。但是如果實現了

ThreadRunnable的區別聯絡、多次start一個執行緒會怎麼樣

一、Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡:     1、Thread類實現了Runable介面。   2、都需要重寫裡面Run方法。 二、實現Runnable介面相對於繼承Thread類來說,有如下顯著的好處:

ThreadRunnable的實現

1、Thread package com.zzm.th01; /** * 執行緒呼叫的隨機性 * Created by ming on 2017/6/15. */ public class th02 extends Thread{ @Override publ

併發程式設計實戰(3): Thread Runnable

寫在前面 這兩個一直放在一起比較,網上太多文章,關鍵有很多錯誤的,都是抄來抄去。 比如這篇文章我就覺得講的不好,可以看評論區小白猿疼疼的評論,Runnable是隻例項化一個類物件,開啟三個執行緒去執行,而Thread是例項化三個類物件,在java中建立啟動執行緒的唯一方法是呼叫它

ThreadRunnable的區別

首先講一下程序和執行緒的區別:   程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換會有較大的開銷,一個程序包含1--n個執行緒。   執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒有獨立的執行棧和程式計數器(PC),執行緒切換開銷小。   執

#多執行緒學習——Thread Runnable的區別

常用的多執行緒的實現方式有兩種——繼承Thread類、實現Runnable介面 那他們的區別是什麼呢? 1.Runnalble具有更好的拓展性 Thread 是類,而Runnable是介面(Thread

併發程式設計之多執行緒基礎-ThreadRunnable的區別及聯絡(二)

上篇文章講述了建立執行緒的常用方式 本篇主要分析一下Thread和Runnable兩種方式建立執行緒的區別及聯絡 聯絡: ▶Thread類實現了Runable介面。 ▶都需要重寫裡面Run方法。 區別: ▶Thread方式不支援多繼承,Runnable方式支援多個實現 ▶Runnable更容易實

【Java基礎_(執行緒篇_第一篇)】繼承Thread;實現runnable;sleep、wait用法區別;ThreadRunnable區別;執行緒停止

一、執行緒兩種實現 1.繼承Thread類: (1)【直接在主類繼承】 package org; // 繼承 Thread 類 public class TestThreadofExt extends Thread { private static int count =

Java多執行緒,ThreadRunnable究竟該用哪個

       很久沒寫部落格了,內心有一絲罪惡感。其中一個原因是最近做的一些東西不適合在部落格上公開。        今天抽空來說說Java多執行緒中的一個小話題,也是新人經常會遇到的。起因是我在給新人找培訓資料的時候,在網上看到了很多Thread和Runnable究竟該用

Java類之間關係

類和類之間關係包括了 is a,has a, use a三種關係 is a包括了 繼承,實現關係 has a包括了 組合,聚合,關聯關係 use a包括了 依賴關係 繼承:子是父的關係,狗是動物 [Java] 純文字檢視 複製程式碼 ? 1 2 publicclass Animal{}

java抽象類介面繼承之間關係

有時候,我們可能想要構造一個很抽象的父類物件,它可能僅僅代表一個分類或抽象概念,它的例項沒有任何意義,因此不希望它能被例項化。例如:有一個父類“ 水果(Fruit)”,它有幾個子類“蘋果(Apple)”、“橘子(Orange)”、“香蕉(Banana)”等。水果在這裡僅僅只是作為一個分類,顯然水果的例項沒有

Java中 ThreadRunnable實現多執行緒的區別聯絡

Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡: 1、Thread類實現了Runable介面。 2、都需要重寫裡面Run方法。 他們之間的區別“ 1、實現Runnable的類更具有健壯性,避免了單繼承的侷限。 2

Java多執行緒程式設計之ThreadRunnable的區別

Thread 和Runnable的最大區別就在於共享資料。每當你new一個Thread的時候,虛擬機器會給你new出來的Thread分配一塊單獨的記憶體。Thread和Thread物件之間的資料不共享。如下: Example1: class Thread1 extends

java中threadrunnable的區別聯絡

在java中可有兩種方式實現多執行緒,一種是繼承Thread類,一種是實現Runnable介面;Thread類是在java.lang包中定義的。一個類只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多執行緒操作了,但是一個類只能繼承一個父類,這是此方法的侷限。 下面看例子: pack

java基礎——ThreadRunnable的區別聯絡

Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡:1、Thread類實現了Runable介面。2、都需要重寫裡面Run方法。他們之間的區別“1、實現Runnable的類更具有健壯性,避免了單繼承的侷限。2、Runna

Android開發之多執行緒程式設計ThreadRunnable使用

Android可有兩種方式實現多執行緒,一種是繼承Thread類,一種是實現Runnable介面;前者只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多執行緒操作了,但是Java中一個類只能繼承一個父類,這是這種方式的侷限性,後者只需要實現一個介面而已,