JAVAスレッドの使い方の詳細

5461 ワード

本文は実例に合わせてJavaのスレッド技術を詳しく説明し、Javaプログラム設計を深く理解するのに一定の助けがあると信じている.具体的には以下の通りです.
多くの人はJAVAを勉强する时すべてスレッドに対してすべて一定の理解があって、私达がAndroidの开発に接触することを始めた时、やっと本当にスレッドがどんなに重要かを発见して、本文はJavaスレッドの使い方の心得をみんなに分かち合って、みんなの参考に供します.
まず、スレッドとプロセスが同じではないことを明らかにしなければなりません.プロセスは何ですか.プロセスはclassファイルを実行する必要があるように、スレッドこそCPUリソースを呼び出して実行します.1つの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);
    }
  }
}


二、スレッド中の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 ;//           ,       
      }
    }
  }
}


ここで特に説明します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;
  }  
}


スレッドのマージと譲渡について簡単に説明します.
一、スレッドをマージする方法、ここで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);
    }
  }  
}


二、スレッドをどのように譲るか、ここでは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プログラムの設計を深く学ぶのに役立つことを期待しています.