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
}
相關推薦
Thread和Runnable之間的關係
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。之所以說是常用的,是因為通
並發編程之多線程基礎-Thread和Runnable的區別及聯系(二)
共享 聯系 star 沒有 static unable end 需要 read 上篇文章講述了創建線程的常用方式 本篇主要分析一下Thread和Runnable兩種方式創建線程的區別及聯系 聯系: ?Thread類實現了Runable接口。 ?都需要重寫裏面Run方
java 多執行緒學習(Java中Thread 和 Runnable的區別)
今天剛學習java多執行緒 在網上查了幾篇博文學習,個人覺得寫的不錯,但是有的地方有個疑問:Java中Thread 和 Runnable的區別。 然後,在網上查詢相關資料,發現幾乎都是一樣的。 下面貼出相關的程式碼: 如果一個類繼承Thread,則不適合資源共享。但是如果實現了
Thread和Runnable的區別和聯絡、多次start一個執行緒會怎麼樣
一、Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡: 1、Thread類實現了Runable介面。 2、都需要重寫裡面Run方法。 二、實現Runnable介面相對於繼承Thread類來說,有如下顯著的好處:
Thread和Runnable的實現
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中建立啟動執行緒的唯一方法是呼叫它
Thread和Runnable的區別
首先講一下程序和執行緒的區別: 程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換會有較大的開銷,一個程序包含1--n個執行緒。 執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒有獨立的執行棧和程式計數器(PC),執行緒切換開銷小。 執
#多執行緒學習——Thread 和 Runnable的區別
常用的多執行緒的實現方式有兩種——繼承Thread類、實現Runnable介面 那他們的區別是什麼呢? 1.Runnalble具有更好的拓展性 Thread 是類,而Runnable是介面(Thread
併發程式設計之多執行緒基礎-Thread和Runnable的區別及聯絡(二)
上篇文章講述了建立執行緒的常用方式 本篇主要分析一下Thread和Runnable兩種方式建立執行緒的區別及聯絡 聯絡: ▶Thread類實現了Runable介面。 ▶都需要重寫裡面Run方法。 區別: ▶Thread方式不支援多繼承,Runnable方式支援多個實現 ▶Runnable更容易實
【Java基礎_(執行緒篇_第一篇)】繼承Thread;實現runnable;sleep、wait用法和區別;Thread和Runnable區別;執行緒停止
一、執行緒兩種實現 1.繼承Thread類: (1)【直接在主類繼承】 package org; // 繼承 Thread 類 public class TestThreadofExt extends Thread { private static int count =
Java多執行緒,Thread和Runnable究竟該用哪個
很久沒寫部落格了,內心有一絲罪惡感。其中一個原因是最近做的一些東西不適合在部落格上公開。 今天抽空來說說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中 Thread和Runnable實現多執行緒的區別和聯絡
Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡: 1、Thread類實現了Runable介面。 2、都需要重寫裡面Run方法。 他們之間的區別“ 1、實現Runnable的類更具有健壯性,避免了單繼承的侷限。 2
Java多執行緒程式設計之Thread和Runnable的區別
Thread 和Runnable的最大區別就在於共享資料。每當你new一個Thread的時候,虛擬機器會給你new出來的Thread分配一塊單獨的記憶體。Thread和Thread物件之間的資料不共享。如下: Example1: class Thread1 extends
java中thread和runnable的區別和聯絡
在java中可有兩種方式實現多執行緒,一種是繼承Thread類,一種是實現Runnable介面;Thread類是在java.lang包中定義的。一個類只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多執行緒操作了,但是一個類只能繼承一個父類,這是此方法的侷限。 下面看例子: pack
java基礎——Thread和Runnable的區別和聯絡
Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡:1、Thread類實現了Runable介面。2、都需要重寫裡面Run方法。他們之間的區別“1、實現Runnable的類更具有健壯性,避免了單繼承的侷限。2、Runna
Android開發之多執行緒程式設計Thread和Runnable使用
Android可有兩種方式實現多執行緒,一種是繼承Thread類,一種是實現Runnable介面;前者只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多執行緒操作了,但是Java中一個類只能繼承一個父類,這是這種方式的侷限性,後者只需要實現一個介面而已,