文章目录
参考自: 传送门
1. run()与start()方法:启动线程
-
使用继承 Thread 类的方法创建新线程
-
从运行结果我们可以看出:虽然步骤1在步骤2前面,但是步骤2却比步骤1先执行完。
-
这是因为 start()方法的执行比较耗时,底层有如下过程:
1)通过 JVM 告诉操作系统创建线程 Thread
2)操作系统开辟内存并调用系统函数创建 Thread 线程对象
3)操作系统对 Thread 线程对象进行调度,以确定执行时机
4)Thread 在操作系统中被成功执行 -
注意: 如果在 run 类中直接调用 thread.run()方法,就不是异步执行了,而是同步执行,此线程对象不交给底层的“线程规划器”处理,而是有 main 主线程来调用,也就是必须等 run()方法中的代码执行完毕后才可以执行后面的代码。如下所示:
2. get方法:获取线程标识
3. currentThread()方法
- 返回对当前正在执行的线程对象的引用
4. isAlive()方法
- 判断当前线程是否存活
5. sleep()方法
- sleep(long millis) 让线程休眠
6. yield()方法
- 其作用是放弃当前的CPU资源,让其他的任务去占用cpu执行时间,放弃时间不确定,有可能刚放弃又马上获得时间片。
7. getStackTrace()方法
- 返回一个表示该线程堆栈跟踪元素数组,如果该线程尚未启动或已经终止,则该方法将返回一个零长度的数组。如果返回的数组不是零长度的,则第一个元素表示堆栈顶,它是该数组中最新的方法调用。最后一个元素表示堆栈底,是该数组中最旧的方法调用。
8. dumpStack()方法
- 将当前线程的堆栈跟踪打印到标准错误流,该方法仅用于调试。
9. getAllStackTraces()方法
- 返回所有线程的堆栈跟踪图,地图键是线程,每个地图的值是StackTraceElement数组,表示对应的Thread的堆栈转储。
- 调用该方法的同时,线程可能也在执行。每个线程的堆栈跟踪仅代表一个快照。
10. setPriority(int newPriority)方法
- 在Java中,线程的优先级分为1-10的等级,如果优先级小于1或者大于10,会抛出IllegalArgumentException()。
- 更改线程的优先级,首先调用这个线程的checkAccess方法,没有参数。这可能会导致投掷SecurityException 。 否则,该线程的优先级设置为指定的小newPriority和最大允许的线程的线程组的优先级。
11. setDaemon(boolean on)方法
- 将此线程标记为守护线程或用户线程,当前运行的唯一线程都是守护线程时,Java虚拟机将退出,线程启动前必须调用此方法。
- on 如果为true,将此线程标记为守护线程。