亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

實例總結(jié)Java多線程編程的方法

 更新時間:2018年10月09日 14:18:33   投稿:laozhang  
在本篇文章里我們給大家總結(jié)了Java多線程編程的方法以及相關(guān)實例代碼,需要的朋友們可以學(xué)習(xí)下。

1.什么時候使用多線程編程

一個任務(wù)在正常情況下是按順序執(zhí)行的,但是如果當前任務(wù)里有多個相似進程塊(例如for,while語句),我們就可以考慮把這些代碼塊抽出來并行運行,無需阻塞

2.實現(xiàn)多線程的幾種方式

一種是繼承Thread類重寫run方法,另一種是實現(xiàn)Runnable接口重寫run方法

啟動多線程很多情況下是為了處理并發(fā)進程,此時對于部分實時性要求不是那么高的業(yè)務(wù)需求,我們還可以通過實現(xiàn)隊列的方式,異步實現(xiàn)。

3.舉例

繼承Thread

/**
 * 
* @ClassName: ThreadByEx 
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日 
* */public class ThreadByEx extends Thread{
 
  @Override  public void run() {    // TODO Auto-generated method stub
    System.out.println("我是繼承線程");
  }
 
}

實現(xiàn)Runnable

/**
 * 
* @ClassName: ThreadByRunnable 
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日 
* */public class ThreadByRunnable implements Runnable{  /*public ThreadByRunnable() {
    this.run();
    // TODO Auto-generated constructor stub
  }*/
 
  public void run() {    // TODO Auto-generated method stub
    System.out.println("我是實現(xiàn)進程");
  }
 
}

測試:

/**
 * 
* @ClassName: Test 
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日 
* */public class Test {  public static void main(String[] args) {    // 繼承Thread啟動的方法
    ThreadByEx t1 = new ThreadByEx();
    t1.start();// 啟動線程    // 實現(xiàn)Runnable啟動線程的方法
    ThreadByRunnable r = new ThreadByRunnable();
    Thread t2 = new Thread(r);
    t2.start();// 啟動線程    //new ThreadByRunnable();  }
 
}

運行結(jié)果:

我是繼承線程

我是實現(xiàn)進程

ok,簡單的多線程實現(xiàn)方式完成了,在調(diào)用start()的時候,該進程已經(jīng)進入可執(zhí)行狀態(tài),等待系統(tǒng)執(zhí)行。

線程處理的幾個常用方法:

void interrupt():向線程發(fā)送中斷請求,線程的中斷狀態(tài)將會被設(shè)置為true,如果當前線程被一個sleep調(diào)用阻塞,那么將會拋出interrupedException異常。

static boolean interrupted():測試當前線程(當前正在執(zhí)行命令的這個線程)是否被中斷。注意這是個靜態(tài)方法,調(diào)用這個方法會產(chǎn)生一個副作用那就是它會將當前線程的中斷狀態(tài)重置為false。

boolean isInterrupted():判斷線程是否被中斷,這個方法的調(diào)用不會產(chǎn)生副作用即不改變線程的當前中斷狀態(tài)。

static Thread currentThread() : 返回代表當前執(zhí)行線程的Thread對象。

守護進程

用來服務(wù)于不是服務(wù)進程的其他所有當前進程下的所有線程

實現(xiàn)deamon.setDaemon(true)就行,要在線程開啟之前啟用

舉例

package com.orange.util;
/**
 * 
 * @ClassName: Test
 * @Description: TODO
 * @author Mr.jqCheng
 * @date 2018年9月26日
 *
 */
public class Test {
  public static void main(String[] args) {
    Thread deamon2 = new Thread(new DaemonRunner2(), "otherRunner");
    deamon2.start();// 啟動線程
    try {
      Thread.sleep(1000);
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    Thread deamon = new Thread(new DaemonRunner(), "DaemonRunner");
    // 設(shè)置為守護線程
    deamon.setDaemon(true);
    deamon.start();// 啟動線程
  }
  static class DaemonRunner implements Runnable {
    public void run() {
      // TODO Auto-generated method stub
      try {
        Thread.sleep(300);
        Thread t = Thread.currentThread();
        System.out.println(t);
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        System.out.println("進入守護線程,說明現(xiàn)在還有其他線程在執(zhí)行");
      }
    }
  }
  static class DaemonRunner2 implements Runnable {
    public void run() {
      // TODO Auto-generated method stub
      try {
        Thread.sleep(1500);
        System.out.println("我是其他線程");
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

執(zhí)行結(jié)果:

Thread[DaemonRunner,5,main]

進入守護線程,說明現(xiàn)在還有其他線程在執(zhí)行

我是其他線程

首先,先啟動其他線程,需要耗時1500ms,同時,主線程耗時1000ms后,開始進入守護線程,此時其它線程還在運行,到了守護線程,耗時300ms,其他線程仍在執(zhí)行,繼續(xù)往下,守護線程執(zhí)行完畢

但是如果我把守護線程的300ms改成500ms,會發(fā)生什么事呢?

出現(xiàn)過兩種情況,畢竟在臨界值

1.我是其他線程

2.Thread[DaemonRunner,5,main]

進入守護線程,說明現(xiàn)在還有其他線程在執(zhí)行

我是其他線程

相關(guān)文章

  • 如何在 Java 中實現(xiàn)不可變類

    如何在 Java 中實現(xiàn)不可變類

    這篇文章主要介紹了如何在 Java 中實現(xiàn)不可變類,不變性是函數(shù)式編程的關(guān)鍵,因為它與盡量減少變化部分的這一目標相一致,這使得對這些部分的推斷更為容易一些。,需要的朋友可以參考下
    2019-06-06
  • SpringBoot的@Conditional條件注解詳解

    SpringBoot的@Conditional條件注解詳解

    這篇文章主要介紹了SpringBoot的@Conditional條件注解詳解,打開每個自動配置類,都會看到@Conditional或其衍生的條件注解,本節(jié)我們來認識下@Conditional注解,需要的朋友可以參考下
    2023-12-12
  • Java8中新特性O(shè)ptional、接口中默認方法和靜態(tài)方法詳解

    Java8中新特性O(shè)ptional、接口中默認方法和靜態(tài)方法詳解

    Java 8 已經(jīng)發(fā)布很久了,很多報道表明Java 8 是一次重大的版本升級。下面這篇文章主要給大家介紹了關(guān)于Java8中新特性O(shè)ptional、接口中默認方法和靜態(tài)方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • Java并發(fā)編程之線程之間的共享和協(xié)作

    Java并發(fā)編程之線程之間的共享和協(xié)作

    這篇文章主要介紹了Java并發(fā)編程之線程之間的共享和協(xié)作,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-04-04
  • elasticsearch kibana簡單查詢講解

    elasticsearch kibana簡單查詢講解

    今天小編就為大家分享一篇關(guān)于elasticsearch kibana簡單查詢講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析

    Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析

    這篇文章主要為大家介紹了Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • 微信跳一跳刷分java代碼實現(xiàn)

    微信跳一跳刷分java代碼實現(xiàn)

    這篇文章主要介紹了微信跳一跳刷分java代碼實現(xiàn),還為大家分享了java刷微信跳一跳問題集,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java多線程連續(xù)打印abc實現(xiàn)方法詳解

    Java多線程連續(xù)打印abc實現(xiàn)方法詳解

    這篇文章主要介紹了Java多線程連續(xù)打印abc實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • springboot配置https訪問的方法

    springboot配置https訪問的方法

    這篇文章主要介紹了springboot配置https訪問的方法,需要的朋友可以參考下
    2018-11-11
  • Java的Servlet及其生命周期詳解

    Java的Servlet及其生命周期詳解

    這篇文章主要介紹了Java的Servlet及其生命周期詳解,Servlet是用Java編寫的服務(wù)器端程序,一門用于開發(fā)動態(tài)web資源的技術(shù),其主要功能在與交互式的瀏覽和修改數(shù)據(jù),生成動態(tài)web內(nèi)容,需要的朋友可以參考下
    2023-11-11

最新評論