程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA線程用法詳解

JAVA線程用法詳解

編輯:關於JAVA

JAVA線程用法詳解。本站提示廣大學習愛好者:(JAVA線程用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA線程用法詳解正文


本文合營實例較為具體的講授了Java的線程技巧,信任關於深刻懂得Java法式設計有必定的贊助。詳細以下:

許多人在進修JAVA時都對線程都有必定的懂得,而當我們開端接觸Android開辟時,才真真正正的發明了線程是多麽的主要,本文就把對Java線程的用法心得分享給年夜家,供年夜家參考。

起首,年夜家必定要分清線程和過程不是一回事,過程是甚麼呢?過程就如我們須要履行class文件,而線程才是真正挪用CPU資本來運轉的。一個class文件普通只要一個過程,但線程可以有許多個,線程的履行是一種異步的履行方法。

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

示例代碼以下:

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);
    }
  }
}

2、線程中的sleep辦法

示例代碼以下:

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溫順那末一點點,不外還不是最好的封閉線程的辦法,上面就為年夜家供給一種方法:

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;
  }  
}

上面就簡略給年夜家引見一下線程中的歸並和讓出:

1、若何歸並線程,此處挪用了join()辦法

示例代碼以下:

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);
    }
  }  
}

2、若何讓出線程,此處挪用了Thread的yield()辦法,以下所示:

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繼續方可以使用此辦法
      }
    }
  }
}

最初和年夜家分享一下關於線程的優先級的成績,代碼以下所示:

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法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved