欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java多線程的實(shí)現(xiàn)方式比較(兩種方式比較)

 更新時(shí)間:2015年11月11日 11:56:13   投稿:mrr  
Java多線程實(shí)現(xiàn)方式有兩種,第一種是繼承Thread類,第二種是實(shí)現(xiàn)Runnable接口,兩種有很多差異,下面跟著本文一起學(xué)習(xí)吧

先看一下java線程運(yùn)行時(shí)各個(gè)階段的運(yùn)行狀態(tài)

線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性。

在引入線程的操作系統(tǒng)中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位。由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)資源,故對(duì)它的調(diào)度所付出的開銷就會(huì)小得多,能更高效的提高系統(tǒng)內(nèi)多個(gè)程序間并發(fā)執(zhí)行的程度,從而顯著提高系統(tǒng)資源的利用率和吞吐量。

線程是程序中一個(gè)單一的順序控制流程。在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程。

多線程主要是為了節(jié)約CPU時(shí)間,發(fā)揮利用,線程的運(yùn)行中需要使用計(jì)算機(jī)的內(nèi)存資源和CPU。

多線程是為了同步完成多項(xiàng)任務(wù),不是為了提高運(yùn)行效率,而是為了提高資源使用效率來提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候?qū)崿F(xiàn)的。

java實(shí)現(xiàn)多線程有兩種方法

1、繼承Thread類

2、實(shí)現(xiàn)Runnable接口

這兩種方法的共同點(diǎn):

不論用哪種方法,都必須用Thread(如果是Thead子類就用它本身)產(chǎn)生線程,然后再調(diào)用start()方法。

兩種方法的不同點(diǎn):

1、繼承Thread類有一個(gè)缺點(diǎn)就是單繼承,而實(shí)現(xiàn)Runnable接口則彌補(bǔ)了它的缺點(diǎn),可以實(shí)現(xiàn)多繼承

2、繼承Thread類必須如果產(chǎn)生Runnable實(shí)例對(duì)象,就必須產(chǎn)生多個(gè)Runnable實(shí)例對(duì)象,然后再用Thread產(chǎn)生多個(gè)線程;而實(shí)現(xiàn)Runnable接口,只需要建立一個(gè)實(shí)現(xiàn)這個(gè)類的實(shí)例,然后用這一個(gè)實(shí)例對(duì)象產(chǎn)生多個(gè)線程。即實(shí)現(xiàn)了資源的共享性

基于以上兩點(diǎn)所以建議用第二種方法

下面用例子來做說明

程序1:

package com.dr.runnable1;
//一個(gè)類只要繼承了Thread類,則此類就是多線程類
class MyThread extends Thread
{
 private String name;
 public MyThread(String name)
 {
  this.name=name;
 }
 //如果要使用多線程,則必須有一個(gè)方法的主體
 public void run()
 {
  //打印輸出
  for(int i=0;i<10;i++)
  {
   System.out.println(this.name+"----->運(yùn)行、、、、");
  }
 }
}
public class Demo1 {
 public static void main(String args[])
 {
//第一種方法
   Runnable r1=new MyThread("線程A");
  Runnable r2=new MyThread("線程B");
  Runnable r3=new MyThread("線程C");
  Thread t1=new Thread(r1);
  Thread t2=new Thread(r2);
  Thread t3=new Thread(r3);
  t1.start();
  t2.start();
  t3.start();
 //  mt1.run();//線程執(zhí)行,使用start方法
//  mt2.run();
//  mt3.run();
//第二種方法
//  MyThread mt1=new MyThread("線程A");
//  MyThread mt2=new MyThread("線程B");
//  MyThread mt3=new MyThread("線程C");
//  mt1.start();
//  mt1.start();//線程只能啟動(dòng)一次
//  mt2.start();
//  mt3.start(); 
 } 
} 

程序的運(yùn)行結(jié)果是:

這是繼承了Thread類,第一種方法產(chǎn)生多個(gè)Runnable實(shí)例對(duì)象,然后用Thread產(chǎn)生多個(gè)線程

第二種方法,因?yàn)檫@個(gè)類已經(jīng)繼承了Thread類,所以就可以直接利用它本身產(chǎn)生多個(gè)線程

程序2:

package com.dr.runnable1;
class MyThread1 implements Runnable
{
 private int ticket=10;
 public void run()
 {
  for(int i=0;i<500;i++)
  {
   if(this.ticket>0)
   {
    System.out.println("賣票----->"+(this.ticket--));
   }
  }
 }
}
public class Demo2 {
 public static void main(String args[])
 {
   MyThread1 mt=new MyThread1();
  Thread t1=new Thread(mt);
  Thread t2=new Thread(mt);
  Thread t3=new Thread(mt);
  t1.start();
  t2.start();
  t3.start();
 } 
} 

程序運(yùn)行結(jié)果:

這個(gè)程序是實(shí)現(xiàn)Runnable了,產(chǎn)生一類的實(shí)例對(duì)象,然后用Thread產(chǎn)生多個(gè)線程。

相關(guān)文章

  • 解決啟用 Spring-Cloud-OpenFeign 配置可刷新項(xiàng)目無法啟動(dòng)的問題

    解決啟用 Spring-Cloud-OpenFeign 配置可刷新項(xiàng)目無法啟動(dòng)的問題

    這篇文章主要介紹了解決啟用 Spring-Cloud-OpenFeign 配置可刷新項(xiàng)目無法啟動(dòng)的問題,本文重點(diǎn)給大家介紹Spring-Cloud-OpenFeign的原理及問題解決方法,需要的朋友可以參考下
    2021-10-10
  • @Autowired注入為null的原因與解決方法

    @Autowired注入為null的原因與解決方法

    我們經(jīng)常會(huì)通過@Autowired注解將某個(gè)類注到另一個(gè)類中,但是會(huì)發(fā)現(xiàn)注不進(jìn)去,報(bào)NULL,所以本文就給大家分析了@Autowired 注入為null 的原因與解決方法,需要的朋友可以參考下
    2023-09-09
  • 使用EasyExcel實(shí)現(xiàn)百萬級(jí)別數(shù)據(jù)導(dǎo)出的代碼示例

    使用EasyExcel實(shí)現(xiàn)百萬級(jí)別數(shù)據(jù)導(dǎo)出的代碼示例

    近期需要開發(fā)一個(gè)將百萬數(shù)據(jù)量MySQL8的數(shù)據(jù)導(dǎo)出到excel的功能,所以本文講給大家介紹了基于EasyExcel實(shí)現(xiàn)百萬級(jí)別數(shù)據(jù)導(dǎo)出,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java線程公平鎖和非公平鎖的差異講解

    Java線程公平鎖和非公平鎖的差異講解

    今天小編就為大家分享一篇關(guān)于Java線程公平鎖和非公平鎖的差異講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Tomcat+JDK安裝和配置教程

    Tomcat+JDK安裝和配置教程

    這篇文章主要為大家詳細(xì)介紹了Tomcat+JDK安裝和配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java實(shí)現(xiàn)雪花算法的原理

    Java實(shí)現(xiàn)雪花算法的原理

    這篇文章主要介紹了Java實(shí)現(xiàn)雪花算法的原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • java使用Memcached簡(jiǎn)單教程

    java使用Memcached簡(jiǎn)單教程

    本文主要記錄Memcached的一些基本使用和簡(jiǎn)單的Monitor,大家參考使用吧
    2013-12-12
  • 加速spring/springboot應(yīng)用啟動(dòng)速度詳解

    加速spring/springboot應(yīng)用啟動(dòng)速度詳解

    這篇文章主要介紹了加速spring/springboot應(yīng)用啟動(dòng)速度詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合EasyExcel?3.x的完整示例

    SpringBoot整合EasyExcel?3.x的完整示例

    EasyExcel 是一個(gè)基于 Java 的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的 Excel 處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成 Excel 的讀、寫等功能,這篇文章主要介紹了SpringBoot整合EasyExcel3.x的過程,需要的朋友可以參考下
    2023-07-07
  • Java利用廣度優(yōu)先搜索實(shí)現(xiàn)抓牛問題

    Java利用廣度優(yōu)先搜索實(shí)現(xiàn)抓牛問題

    廣度優(yōu)先搜索是最簡(jiǎn)便的圖的搜索算法之一,這一算法也是很多重要的圖的算法的原型。本文將利用廣度優(yōu)先搜索實(shí)現(xiàn)抓牛問題,感興趣的可以了解下
    2022-06-06

最新評(píng)論