一、线程的常用结构
1.线程中的构造器
public Thread():分配一个新的线程对象。
public Thread(String name):分配一个指定名字的新的线程对象。
public Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法。
public Thread(Runnable target,String name):分配一个带有制定目标新的线程对象并指定名字。
2.线程中的常用方法
start():①启动线程②调用线程的run()
run():将线程要执行的操作声明在run()中
currentThread():获取当前执行代码对应的线程
getName():获取线程名
setName():设置线程名
sleep(long millis):静态方法,调用时,可以使得当前线程睡眠指定的毫秒数
yield():一旦执行此方法,就释放CPU的执行权
join():在线程a中通过线程b调用join(),意味着线程a进入阻塞状态,直到线程b执行结束,线程a才结束阻塞状态继续执行。
isAlive():判断当前线程是否存活
过时方法
stop():强行结束一个线程的执行,直接进入死亡状态。不建议使用
void suspend() / void resume():可能造成死锁,所以也不建议使用
3.线程的优先级
getPriority():获取线程的优先级
setPriority():设置线程的优先级,范围[1,10]
Thread类内部声明的三个常量:
/**
* The minimum priority that a thread can have.
* 最低优先级
*/
public final static int MIN_PRIORITY = 1;
/**
* The default priority that is assigned to a thread.
* 普通优先级,默认情况下main线程具有普通优先级。
*/
public final static int NORM_PRIORITY = 5;
/**
* The maximum priority that a thread can have.
* 最高优先级
*/
public final static int MAX_PRIORITY = 10;
二、线程的生命周期
jdk1.5之前
jdk1.5之后
例题:新年倒计时
模拟新年倒计时,每隔1秒输出一个数字,依次输出10,9,8…1,最后输出:新年快乐!
public class HappyNewYear {
public static void main(String[] args) {
for (int i = 10; i >= 0; i--) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i > 0) {
System.out.println(i);
} else {
System.out.println("Happy New Year!");
}
}
}
}