线程的属性
包括线程:
- 编号(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--;
}
}