麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

實例總結Java多線程編程的方法

2024-07-14 08:42:29
字體:
來源:轉載
供稿:網友

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

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

2.實現多線程的幾種方式

一種是繼承Thread類重寫run方法,另一種是實現Runnable接口重寫run方法

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

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("我是繼承線程");  } }

實現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("我是實現進程");  } }

測試:

/** * * @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();// 啟動線程    // 實現Runnable啟動線程的方法    ThreadByRunnable r = new ThreadByRunnable();    Thread t2 = new Thread(r);    t2.start();// 啟動線程    //new ThreadByRunnable();  } }

運行結果:

我是繼承線程

我是實現進程

ok,簡單的多線程實現方式完成了,在調用start()的時候,該進程已經進入可執行狀態,等待系統執行。

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

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

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

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

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

守護進程

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

實現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");    // 設置為守護線程    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("進入守護線程,說明現在還有其他線程在執行");      }    }  }  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();      }    }  }}

執行結果:

Thread[DaemonRunner,5,main]

進入守護線程,說明現在還有其他線程在執行

我是其他線程

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

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

出現過兩種情況,畢竟在臨界值

1.我是其他線程

2.Thread[DaemonRunner,5,main]

進入守護線程,說明現在還有其他線程在執行

我是其他線程


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 钻石午夜影院 | 在线无码 | 精品国产一级毛片 | 色中色在线视频 | 毛片福利| 国产欧美亚洲精品 | 色综合视频 | 爽毛片| 国产品久久 | a级高清免费毛片av在线 | 久久成人国产精品 | 久久久www成人免费精品 | 91精品福利视频 | 久综合| 黄色毛片免费视频 | 久久精品视频网站 | 九九热精品在线 | 国产精品美女久久久久久网站 | 国产精品久久999 | 最新av在线免费观看 | 一区www| 免费看国产 | 91精品久久久久久久久网影视 | 天天透天天狠天天爱综合97 | 斗罗破苍穹在线观看免费完整观看 | 欧美成人精品一区 | 一区二区三区日韩精品 | 国产精品视频自拍 | 午夜爽爽爽男女免费观看hd | 欧美成人精品一区二区 | 久久国产精品二国产精品中国洋人 | a视频在线看 | 欧美毛片在线观看 | 韩国草草影院 | 羞羞的网址 | 自拍亚洲伦理 | 欧美视频一区二区三区 | 视频一区二区中文字幕 | 国产精品视频二区不卡 | 日本黄色免费播放 | 天天看天天摸天天操 |