一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - JAVA線程用法詳解

JAVA線程用法詳解

2019-11-27 14:39shichen2014 JAVA教程

這篇文章主要介紹了JAVA線程用法,配合實例針對Java中線程的開啟、sleep、合并與讓出等進行了較為深入的分析,需要的朋友可以參考下

本文配合實例較為詳細的講解了Java的線程技術,相信對于深入理解Java程序設計有一定的幫助。具體如下:

很多人在學習JAVA時都對線程都有一定的了解,而當我們開始接觸Android開發時,才真真正正的發現了線程是多麼的重要,本文就把對Java線程的用法心得分享給大家,供大家參考。

首先,大家一定要分清線程和進程不是一回事,進程是什么呢?進程就如我們需要執行class文件,而線程才是真正調用CPU資源來運行的。一個class文件一般只有一個進程,但線程可以有很多個,線程的執行是一種異步的執行方式。

一、如何在main函數中再開啟一個線程:

示例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Thread_one {
  public static void main(String [] args){
    Run run = new Run();
    //run.run();//此為方法的調用,和線程有著天壤之別
    Thread thread = new Thread(run);
    thread.start();//啟動線程,調用線程的run()方法
    for(int i=1; i<=20; i++){
      System.out.println("主線程i的 值:--------"+i);
    }
  }
}
class Run implements Runnable{
 
  @Override
  public void run() {
    for(int i=1; i<=20; i++){
      System.out.println("子線程i的 值:"+i);
    }
  }
}

二、線程中的sleep方法

示例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Thread_sleep {
  /*
   * 線程停頓
   */
  public static void main(String [] args){
    Runone run = new Runone();
    Thread thread = new Thread(run);
    thread.start();
    try {
      Thread.sleep(5000);
      thread.interrupt();//中斷線程的執行
      //thread.stop();//相對中斷線程,stop過于粗暴,不建議使用,一般在需要強制關閉子線程時方使用此方法
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}
class Runone implements Runnable{
  @Override
  public void run() {
    for(int i=1 ; i<10; i++){
      try {
        Thread.sleep(1000);
        System.out.println("-----"+new Date()+"-----");
      } catch (InterruptedException e) {
        return ;//當捕獲到子線程被中斷時,直接關閉子線程
      }
    }
  }
}

在這里特別說明一點,thread.interrupt();可以中斷線程的執行,相對stop溫柔那么一點點,不過還不是最佳的關閉線程的方法,下面就為大家提供一種方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Thread_stop {
  public static void main(String [] args){
    Runthree run = new Runthree();
    Thread th = new Thread(run);
    th.start();
    try {
      Thread.sleep(5000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    run.setStop();
  }
}
class Runthree implements Runnable{
  boolean flag;
  @Override
  public void run() {
    flag = true;
    int i = 0;
    while(flag){
      try {
        System.out.println("子線程----"+(i++));
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
  public void setStop(){
    flag = false;
  
}

下面就簡單給大家介紹一下線程中的合并和讓出:

一、如何合并線程,此處調用了join()方法

示例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Thread_join {
  /*
   * 合并線程
   */
  public static void main(String [] args){
    Runtwo run = new Runtwo();
    Thread thread = new Thread(run);
    thread.start();
    try {
      thread.join();//合并線程,此時相當于方法調用
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    for(int i=0; i<10; i++){
      System.out.println("主線程:"+i);
    }
  }
}
class Runtwo implements Runnable{
 
  @Override
  public void run() {
    for(int i=0; i<10; i++){
      System.out.println("子線程:----"+i);
    }
  
}

二、如何讓出線程,此處調用了Thread的yield()方法,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Thread_yield {
 
  /**讓出CPU
   * @param args
   */
  public static void main(String[] args) {
    Th th = new Th("aaa");
    th.start();
    for(int i = 0 ; i<=10; i++){
      System.out.println("主線程----"+i);
    }
  }
}
class Th extends Thread{
  Th(){}
  Th(String s){super(s);}
 
  @Override
  public void run() {
    for(int i = 0; i<=10; i++){
      if(i%3!=0){
        System.out.println("子線程"+i);
      }else{
        System.out.println("子線程i="+i+" 線程進行切換");
        yield();//從Thread繼承方可使用此方法
      }
    }
  }
}

最后和大家分享一下關于線程的優先級的問題,代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Thread_priority {
  /*
   * priority設置線程的優先級
   * Thread默認的優先級為5;Thread的最大優先級為10,最小為0
   */
  public static void main(String [] args){
    T1 t1 = new T1();
    T2 t2 = new  T2();
    t1.start(); 
    //t1.setPriority(Thread.NORM_PRIORITY+3);//設置t1的優先級
    t2.start();
  }
}
class T1 extends Thread{
 
  @Override
  public void run() {
    for(int i = 0; i<50; i++){
      System.out.println("線程T1-----"+i);
    }
  }
}
class T2 extends Thread{
 
  @Override
  public void run() {
    for(int i = 0; i<50; i++){
      System.out.println("線程T2"+i);
    }
  
}

相信大家通過以上代碼基本已經了解JAVA中的線程機制,希望本文所述對大家深入學習Java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人在女人下面狂躁 | xx顶级欧美熟妞xxhd | 国产一级黄色录像 | 国产精品久久久久不卡绿巨人 | 亚洲欧美综合区自拍另类 | 人禽l交免费视频观看+视频 | 8mav福利视频| 国产高清日韩 | 欧美人xxxxxbbbb | 99热这里只有精品一区二区三区 | 久久AV国产麻豆HD真实 | 无码人妻丰满熟妇啪啪网不卡 | yjzz视频 | 俺去啦最新 | 日本深夜影院 | 色婷丁香| h视频免费高清在线观看 | 国产精品探花一区在线观看 | 9999热视频| 久久九九有精品国产23百花影院 | 色戒完整版2小时38分钟 | 亚洲女人国产香蕉久久精品 | 性鸥美 | 欧美成人一区二区三区 | 9 1 视频在线 | 欧美日韩国产最新一区二区 | 俄罗斯海滩厕所偷窥 | 国产精品久久久久久久久99热 | 男人插女人软件 | 国产精品欧美亚洲韩国日本99 | 精品一区二区三区自拍图片区 | 日本中文字幕一区二区有码在线 | 天使萌痴汉在线中文字幕 | 亚洲精品国产自在现线最新 | 美女露尿口 | 修修视频在线观看 | 日本红色高清免费观看 | 久久久久久免费高清电影 | 91国内精品线免费播放 | 91麻豆精品国产自产在线 | 欧美在线成人免费国产 |