欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA线程用法详解

程序员文章站 2024-02-29 22:30:58
本文配合实例较为详细的讲解了java的线程技术,相信对于深入理解java程序设计有一定的帮助。具体如下: 很多人在学习java时都对线程都有一定的了解,而当我们开始接触a...

本文配合实例较为详细的讲解了java的线程技术,相信对于深入理解java程序设计有一定的帮助。具体如下:

很多人在学习java时都对线程都有一定的了解,而当我们开始接触android开发时,才真真正正的发现了线程是多麽的重要,本文就把对java线程的用法心得分享给大家,供大家参考。

首先,大家一定要分清线程和进程不是一回事,进程是什么呢?进程就如我们需要执行class文件,而线程才是真正调用cpu资源来运行的。一个class文件一般只有一个进程,但线程可以有很多个,线程的执行是一种异步的执行方式。

一、如何在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 ;//当捕获到子线程被中断时,直接关闭子线程
      }
    }
  }
}

在这里特别说明一点,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;
  }  
}

下面就简单给大家介绍一下线程中的合并和让出:

一、如何合并线程,此处调用了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程序设计有所帮助。