线程基本属性和方法

线程的属性

包括线程:

  • 编号(ID)
  • 名称(Name)
  • 线程类别(Daemon)
  • 优先级(Priority)

线程编号ID:类型long,用于标识不同的线程,编号唯一性只存在java虚拟机的一次运行有效

线程名称Name:类型String,默认Thread-线程编号,设置该属性有助于线程调试和问题定位。

线程类别Daemon:类型boolean,值为true表示该线程为守护线程,否则为用户线程,默认值与相应线程的父线程该属性值相同,该属性必须在线程启动前设置!否则会报错

优先级Priority:类型int,该属性本质上是给线程调度器的提示,用于表示应用程序那个线程优先运行。java定义了1~10的10个优先级别。默认值为5(普通优先级别)。对应一个具体的线程而言,优先级别的默认值与父线程相同。

注:线程并不保证执行顺序按优先级进行!优先级使用不当可能导致某些线程用于无法得到运行!一般情况下不设置即可。

用户线程(User Thread)和守护线程(Daemon):

用户线程会阻止Java虚拟机的正常停止,即一个Java虚拟机只有在其所有的用户线程运行都结束的情况下才能正常停止。
守护线程不会影响Java虚拟机的正停止,即应用程序中有守护线程在运行也不会影响Java虚拟机的正常停止。因此守护线程通常用于执行一些重要性不是很高的任务,如监视其他线程的运行情况。

线程常用方法:

currentThread(): 返回当前线程,当前代码的执行线程

void run(): 实现线程任务处理逻辑

void start(): 启动相应线程

void join(): 等待相应线程结束,若线程A调用B的join法法,那么线程A会被暂停,直到线程B运行结束。

static void yield(): 使当前线程自动放弃对处理器的占用,可能导致当前线程被暂停

注:此方法不可靠,被调用时线程仍可能继续运行!(视系统而定)

static void sleep(long millis):使当前线程休眠指定时间

简易定时器:

public class SimpleTimer {
  private static int count;

  public static void main(String[] args) {
    count = args.length >= 1 ? Integer.valueOf(args[0]) : 60;
    int remaining;
    while (true) {
      remaining = countDown();
      if (0 == remaining) {
        break;
      } else {
        System.out.println("Remaining " + count + " second(s)");
      }

      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        // 什么也不做;
      }
    }
    System.out.println("Done.");
  }

  private static int countDown() {
    return count--;
  }
}

猜你喜欢

转载自www.cnblogs.com/sanzashu/p/11058610.html