1. 程式人生 > >Java中 Thread和Runnable實現多執行緒的區別和聯絡

Java中 Thread和Runnable實現多執行緒的區別和聯絡

Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡:

1、Thread類實現了Runable介面。

2、都需要重寫裡面Run方法。

他們之間的區別“

1、實現Runnable的類更具有健壯性,避免了單繼承的侷限。

2、Runnable更容易實現資源共享,能多個執行緒同時處理一個資源。

看一下以繼承Thread的賣票例子:

public static void main(String[] args) {
		// TODO Auto-generated method stub
			
			new MyThread().start();
			new MyThread().start();
			
	}


class MyThread extends Thread{  
    private int ticket = 5;  
    public void run(){  
    	 while(true){
    		 System.out.println("Thread ticket = " + ticket--);  
             if(ticket < 0){  
                break;
             }  
         }  
    }  
}  
輸出結果:
Thread ticket = 5
Thread ticket = 5
Thread ticket = 4
Thread ticket = 4
Thread ticket = 3
Thread ticket = 2
Thread ticket = 3
Thread ticket = 1
Thread ticket = 2
Thread ticket = 0
Thread ticket = 1
Thread ticket = 0

從以上輸出結果可以看出,我們創造了2個多執行緒物件,他們分別實現了買票任務,也就是一共賣了12張票。
實現Runnable介面的賣票例子:
<pre name="code" class="html">public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread2 m=new MyThread2();
			new Thread(m).start();
			new Thread(m).start();
		
			
	}
class MyThread2 implements Runnable{  
    private int ticket = 5;  
    public void run(){  
    	 while(true){
    		 System.out.println("Runnable ticket = " + ticket--);  
             if(ticket < 0){  
                break;
             }  
         } 
    }  
}  
輸出結果:
Runnable ticket = 5
Runnable ticket = 4
Runnable ticket = 3
Runnable ticket = 2
Runnable ticket = 1
Runnable ticket = 0


從結果我們可以看到,雖然我們聲明瞭兩個執行緒,但是一共賣了6張票。他們實現了資源共享。PS:在實際開發中,一定要注意命名規範,其次上面實現Runable介面的例子由於同時操作一個資源,會出現執行緒不安全的情況,如果情況需要,我們需要進行同步操作。

相關推薦

Java ThreadRunnable實現執行區別聯絡

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

Java架構-Spring4+Springmvc+quartz實現執行動態定時排程

scheduler定時排程系統是大多行業專案都需要的,傳統的spring-job模式,個人感覺已經out了,因為存在很多的問題,特別是定時排程的追加、修改、刪除等,需要修改xml,xml的配置生效無非是熱部署灰度釋出方案或者直接停止、重啟伺服器,完全不能做到自動啟動、修復方式。 提醒

java的Executors簡介與執行在網站上逐步優化的運用案例

提供Executor的工廠類 忽略了自定義的ThreadFactory、callable和unconfigurable相關的方法 newFixedxxx:在任意時刻,最多有nThreads個執行緒在處理task;如果所有執行緒都在執行時來了新的任務,它會被扔

通過實現runnable實現執行操作

第一步:建立一個抽象類,實現runnable介面。 public abstract class ThreadRun implements Runnable { @Override public void run() { doSomeThing();

C++之執行(C++11 thread.h檔案實現執行

轉載自: 與 C++11 多執行緒相關的標頭檔案 C++11 新標準中引入了四個標頭檔案來支援多執行緒程式設計,他們分別是<atomic> ,<thread>,<mutex>,<condition_variable>和&l

01-實現執行切換排程實驗介紹(協程原理)

本系列文章旨在記錄完成一個小型使用者級執行緒建立、切換與排程框架的過程,並不能代替作業系統為我們提供的執行緒框架。 為什麼要寫這樣的東西呢?目的很簡單,僅僅在於學習作業系統中的程序或執行緒切換與排程原理。所以,請不要把程式碼試圖用到你的工程或者專案中,出了問題

執行池(Java有哪些方法獲取執行

# 執行緒池(Java中有哪些方法獲取多執行緒) ## 前言 獲取多執行緒的方法,我們都知道有三種,還有一種是實現Callable介面 - 實現Runnable介面 - 實現Callable介面 - 例項化Thread類 - 使用執行緒池獲取 ## Callable介面 Callable介面,是一種

Java併發程式設計(6):RunnableThread實現執行區別(含程式碼)

Java中實現多執行緒有兩種方法:繼承Thread類、實現Runnable介面,在程式開發中只要是多執行緒,肯定永遠以實現Runnable介面為主,因為實現Runnable介面相比繼承Thread類有如下優勢: 1、可以避免由於Java的單繼承特性而帶來的侷限; 2、增強程式的健壯性,程式碼能夠被多個執行

Java併發程式設計】之六:RunnableThread實現執行區別(含程式碼)

    Java中實現多執行緒有兩種方法:繼承Thread類、實現Runnable介面,在程式開發中只要是多執行緒,肯定永遠以實現Runnable介面為主,因為實現Runnable介面相比繼承Th

java實現執行的兩種方式繼承Thread實現Runnable介面

 * 實現方式和繼承方式有什麼區別呢?  *         區別:  *                 繼承Thread:執行緒程式碼存放在Thread子類run方法中  *                 實現Runnable:執行緒程式碼存放在介面的子類的run方法

Java - Thread Runnable實現線程

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

Java 實現執行Thread Runnable Callable 三種方式

Java 多執行緒 java 實現 多執行緒 三種方法 1. 繼承Thread重寫 run方法。 2.實現Runnable的run方法。無返回值。一個類可以實現多個介面。 3.實現Callable的call方法。有返回值,可以丟擲執行緒錯誤。一個類可以實現多個介面。 public class

java執行系列(一):ThreadRunnable、Callable實現執行區別

實現多執行緒 java實現多執行緒的方法有三種,分別是繼承thread類,實現runnable介面,實現callable介面(call方法有返回值) /** * 繼承Thread */ public class MyThread extends Thread{ int a = 0;

Java執行實現(程序與執行的概念、Java繼承Thread實現執行Java實現Runnable介面實現執行ThreadRunnable區別實現Callable介面實現執行

1 程序與執行緒 1.1 程序與執行緒的概念 什麼是程序?   程序: 作業系統中一個程式的執行週期。(比如我們想要在電腦上登入QQ,從雙擊qq按鈕---->關閉qq這個過程就是一個程序)   多程序: 同一時刻跑多個程式。   在DOS(磁碟作業系統時

java 匿名內部類說明 及其執行實現繼承Thread實現Runnable

原文:http://tjukk.iteye.com/blog/2047663 匿名內部類也就是沒有名字的內部類 正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化程式碼編寫 但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個介面 例項1:不使用匿名內部類來實現抽象方法

實現執行得兩種方法:Thread類整合Runnable介面實現

建立執行緒的第一種方式:繼承Thread類。 步驟: 1,定義類繼承Thread。 2,複寫Thread類中的run方法。 目的:將自定義程式碼儲存在run方法。讓執行緒執行。//run();僅僅是物件呼叫方法。而執行緒建立了,並沒有執行。 3,呼叫執行緒的start方法, 該方法兩個作用:啟動執行緒,呼

Java併發(十八):阻塞佇列BlockingQueue BlockingQueue(阻塞佇列)詳解 二叉堆(一)之 圖文解析 C語言的實現 多執行緒程式設計:阻塞、併發佇列的使用總結 Java併發程式設計:阻塞佇列 java阻塞佇列 BlockingQueue(阻塞佇列)詳解

阻塞佇列(BlockingQueue)是一個支援兩個附加操作的佇列。 這兩個附加的操作是:在佇列為空時,獲取元素的執行緒會等待佇列變為非空。當佇列滿時,儲存元素的執行緒會等待佇列可用。 阻塞佇列常用於生產者和消費者的場景,生產者是往佇列裡新增元素的執行緒,消費者是從佇列裡拿元素的執行緒。阻塞佇列就是生產者

java執行 內部類實現執行 Runable介面的實現

  /* java.lang.Thead      java中的多執行緒    類從  Thread  覆蓋run方法    呼叫start啟動x執行緒  java中如果執行緒只剩後臺執行緒那麼程式終止執行 setDaemon設定為後臺執行緒     當進城中只剩下後臺

執行 繼承Thread實現Runnable介面 執行安全 synchronized 單例設計懶漢 鎖死

程序 是一個正在執行中的程式。 每個程序執行都有一個執行順序,該順序是一個執行路徑,或者叫一個控制單元。 舉例子:一個程序,就是一個正在執行的程式。 執行緒 就是程序中的一個獨立的控制單元。 執行緒在

JavaCallable實現執行

一、Runnable和Callable< V >原始碼 先回顧一下Runnable和Callable< V >原始碼吧; //Runnable 原始碼 @FunctionalInterface public interface R