亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java中Runnable和Thread的區別分析

2020-01-31 16:50:44
字體:
來源:轉載
供稿:網友

Thread類是在java.lang包中定義的。一個類只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多線程操作了,但是一個類只能繼承一個父類,這是此方法的局限,

  下面看例子:

復制代碼 代碼如下:

  package org.thread.demo;

  class MyThread extends Thread{

  private String name;

  public MyThread(String name) {

  super();

  this.name = name;

  }

  public void run(){

  for(int i=0;i<10;i++){

  System.out.println("線程開始:"+this.name+",i="+i);

  }

  }

  }

  package org.thread.demo;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread("線程a");

  MyThread mt2=new MyThread("線程b");

  mt1.run();

  mt2.run();

  }

  }


  但是,此時結果很有規律,先第一個對象執行,然后第二個對象執行,并沒有相互運行。在JDK的文檔中可以發現,一旦調用start()方法,則會通過JVM找到run()方法。下面啟動

  start()方法啟動線程:

復制代碼 代碼如下:

  package org.thread.demo;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread("線程a");

  MyThread mt2=new MyThread("線程b");

  mt1.start();

  mt2.start();

  }

  };


    這樣程序可以正常完成交互式運行。那么為啥非要使用start();方法啟動多線程呢?

  在JDK的安裝路徑下,src.zip是全部的java源程序,通過此代碼找到Thread中的start()方法的定義,可以發現此方法中使用了private native void start0();其中native關鍵字表示可以調用操作系統的底層函數,那么這樣的技術成為JNI技術(java Native Interface)

  ?Runnable接口

  在實際開發中一個多線程的操作很少使用Thread類,而是通過Runnable接口完成。

復制代碼 代碼如下:

  public interface Runnable{

  public void run();

  }


  例子:
復制代碼 代碼如下:

  package org.runnable.demo;

  class MyThread implements Runnable{

  private String name;

  public MyThread(String name) {

  this.name = name;

  }

  public void run(){

  for(int i=0;i<100;i++){

  System.out.println("線程開始:"+this.name+",i="+i);

  }

  }

  };

  但是在使用Runnable定義的子類中沒有start()方法,只有Thread類中才有。此時觀察Thread類,有一個構造方法:public Thread(Runnable targer)此構造方法接受Runnable的子類實例,也就是說可以通過Thread類來啟動Runnable實現的多線程。(start()可以協調系統的資源):

復制代碼 代碼如下:

  package org.runnable.demo;

  import org.runnable.demo.MyThread;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread("線程a");

  MyThread mt2=new MyThread("線程b");

  new Thread(mt1).start();

  new Thread(mt2).start();

  }

  }


  ? 兩種實現方式的區別和聯系:

  在程序開發中只要是多線程肯定永遠以實現Runnable接口為主,因為實現Runnable接口相比

  繼承Thread類有如下好處:

  ->避免點繼承的局限,一個類可以繼承多個接口。

  ->適合于資源的共享

  以賣票程序為例,通過Thread類完成:

復制代碼 代碼如下:

  package org.demo.dff;

  class MyThread extends Thread{

  private int ticket=10;

  public void run(){

  for(int i=0;i<20;i++){

  if(this.ticket>0){

  System.out.println("賣票:ticket"+this.ticket--);

  }

  }

  }

  };


  下面通過三個線程對象,同時賣票:
復制代碼 代碼如下:

  package org.demo.dff;

  public class ThreadTicket {

  public static void main(String[] args) {

  MyThread mt1=new MyThread();

  MyThread mt2=new MyThread();

  MyThread mt3=new MyThread();

  mt1.start();//每個線程都各賣了10張,共賣了30張票

  mt2.start();//但實際只有10張票,每個線程都賣自己的票

  mt3.start();//沒有達到資源共享

  }

  }


  如果用Runnable就可以實現資源共享,下面看例子:
復制代碼 代碼如下:

  package org.demo.runnable;

  class MyThread implements Runnable{

  private int ticket=10;

  public void run(){

  for(int i=0;i<20;i++){

  if(this.ticket>0){

  System.out.println("賣票:ticket"+this.ticket--);

  }

  }

  }

  }

  package org.demo.runnable;

  public class RunnableTicket {

  public static void main(String[] args) {

  MyThread mt=new MyThread();

  new Thread(mt).start();//同一個mt,但是在Thread中就不可以,如果用同一

  new Thread(mt).start();//個實例化對象mt,就會出現異常

  new Thread(mt).start();

  }

  };


  雖然現在程序中有三個線程,但是一共賣了10張票,也就是說使用Runnable實現多線程可以達到資源共享目的。

  Runnable接口和Thread之間的聯系:

  public class Thread extends Object implements Runnable

  發現Thread類也是Runnable接口的子類。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产69精品久久久久99| 国产不卡av在线免费观看| 欧美一区二粉嫩精品国产一线天| 国产69精品久久久久9999| 亚洲欧美日韩一区二区三区在线| 国产精品久久久久久久久久三级| 久久香蕉精品香蕉| 日韩中文字幕免费看| 91影院在线免费观看视频| 日韩视频亚洲视频| 国产精品一久久香蕉国产线看观看| 欧美理论电影在线观看| 日韩中文在线中文网三级| 亚洲国产精久久久久久久| 在线精品视频视频中文字幕| 日韩精品丝袜在线| 92裸体在线视频网站| 国产精品一区二区三区久久久| 国产精品成av人在线视午夜片| 国产主播在线一区| 日本高清+成人网在线观看| 亚洲国产精品久久久| 亚洲欧美三级在线| 国产在线精品成人一区二区三区| 国产91久久婷婷一区二区| 欧美激情va永久在线播放| 北条麻妃一区二区在线观看| 久久综合国产精品台湾中文娱乐网| 国产亚洲一区二区精品| 亚洲精品一区中文| 一本色道久久88综合亚洲精品ⅰ| 欧美与欧洲交xxxx免费观看| 亚洲精品中文字幕有码专区| 黑人巨大精品欧美一区二区三区| 日韩一区二区三区在线播放| 欧美日韩一区二区精品| 亚洲激情视频在线观看| 欧美xxxx14xxxxx性爽| 亚洲国产成人精品电影| 性夜试看影院91社区| 美女av一区二区| 日韩精品视频免费在线观看| 国产日韩欧美中文| 狠狠色噜噜狠狠狠狠97| 欧美极品在线播放| 欧美激情喷水视频| 欧美一级电影免费在线观看| 亚洲国产成人一区| 91九色视频导航| 亚洲激情视频网站| 欧美精品999| 97久久精品人人澡人人爽缅北| 成人黄色在线观看| 精品视频久久久久久久| 国产精品美乳在线观看| 日韩专区在线观看| 色狠狠av一区二区三区香蕉蜜桃| 亚洲一区av在线播放| 亚洲va欧美va国产综合剧情| 亚洲精品美女在线观看| 91精品视频一区| 国产精品亚洲网站| 亚洲综合在线做性| 亚洲精品自拍视频| 国产精品一久久香蕉国产线看观看| 日韩专区中文字幕| 精品久久中文字幕| 国产成人一区二| 国产日韩精品视频| 久久亚洲一区二区三区四区五区高| 久久99热精品这里久久精品| 久久精品91久久香蕉加勒比| 精品亚洲va在线va天堂资源站| 国产欧美精品在线播放| 亚洲精品av在线| 国产精品视频专区| 亚洲精品色婷婷福利天堂| 欧美www视频在线观看| 亚洲精品美女在线观看播放| 欧美极品少妇xxxxx| 国产免费一区二区三区香蕉精| 韩日精品中文字幕| 国产精品视频久久久久| 亚洲色图校园春色| 欧美俄罗斯性视频| 国产精品免费一区| 欧美激情一区二区三区久久久| 亚洲精品影视在线观看| 亚洲黄色在线观看| 日韩在线一区二区三区免费视频| 亚洲一级片在线看| 久久久久国产一区二区三区| 亚洲人成五月天| 在线播放国产一区中文字幕剧情欧美| 日本三级久久久| 美女福利视频一区| 精品女厕一区二区三区| 国产婷婷色综合av蜜臀av| 在线播放国产一区中文字幕剧情欧美| 亚洲成人1234| 不卡在线观看电视剧完整版| 91av在线免费观看视频| 精品久久久av| 日韩电视剧免费观看网站| 午夜免费在线观看精品视频| 亚洲最大成人网色| 91社区国产高清| 国产精品久久久久999| 午夜精品www| 午夜精品一区二区三区在线播放| 精品福利免费观看| 国产91在线视频| 欧美大成色www永久网站婷| 国产一区二区三区在线视频| 精品久久久久久久久久| 亚洲欧美综合区自拍另类| 欧美激情xxxx| 性欧美激情精品| 亚洲激情免费观看| 日韩中文在线中文网三级| 亚洲一区二区三区视频| 久久国产精品网站| 国产精品久久久久久五月尺| 免费不卡欧美自拍视频| 亚洲一区二区三区777| 亚洲成人网久久久| 丁香五六月婷婷久久激情| 欧美极品少妇xxxxⅹ喷水| 美女撒尿一区二区三区| 国产精品18久久久久久首页狼| 日韩电影中文 亚洲精品乱码| 91av在线国产| 自拍偷拍亚洲精品| 日韩在线视频网| 亚洲国产高清福利视频| 国产精品永久免费| 亚洲国产欧美久久| 欧美激情视频网站| 国产日韩视频在线观看| 久久久日本电影| 日韩欧美在线视频观看| 亚洲一区二区三区四区在线播放| 国产精品免费电影| 亚洲精品视频中文字幕| 亚洲女人被黑人巨大进入| 97成人精品视频在线观看| 2021久久精品国产99国产精品| 亚洲91精品在线观看| 国a精品视频大全| 俺也去精品视频在线观看| 日韩成人av网| 亚洲在线www| 91在线观看欧美日韩| 91亚洲精品视频| 欧美色另类天堂2015| 欧美日韩一区二区在线播放| 国产一区私人高清影院| 亚洲人成电影网| 久久天堂av综合合色| 久久亚洲国产成人| 国产精品美女主播| 日韩av色综合| 一区二区三区视频在线| 一区二区三区美女xx视频|