在更深入地学习Java多线程之前,我们必须熟练有关Thread
类的某些获取或设置线程相关信息的方法才行。
有关线程的信息,对于我们日常开发比较重要的也就那几个。线程名、线程ID、线程的优先级、线程的状态。这里就以一个简单的程序打印线程的各种信息。
首先,先来看任务类Task
的代码。
1 | public class Task implements Runnable { |
这里,我给任务类Task
指定了一个域duration
存储一个毫秒数,它表示执行该任务的所需时间,默认值是0,但这里也可以通过构造函数指定duration
具体的毫秒数是多少。在run
方法里,使用一个循环模拟任务的执行,经过duration
毫秒后,该循环就会终止。然后,再让执行该任务的线程睡眠200毫秒。任务执行的整个过程如上所述。
而打印线程相关信息的程序代码如下。
1 | public class MainThread2 { |
运行后的打印结果:
method name id priority current state previous state
------ ---- -- -------- ------------- --------------
main Thread#0 9 10 RUNNABLE NEW
main Thread-1 10 1 RUNNABLE NEW
main Thread-2 11 10 RUNNABLE NEW
main Thread#3 12 1 RUNNABLE NEW
main Thread-4 13 10 RUNNABLE NEW
main Thread-5 14 1 RUNNABLE NEW
main Thread#6 15 10 RUNNABLE NEW
main Thread-7 16 5 RUNNABLE NEW
main Thread-8 17 10 RUNNABLE NEW
main Thread#9 18 1 RUNNABLE NEW
main Thread#0 9 10 TIMED_WAITING RUNNABLE
main Thread-1 10 1 TIMED_WAITING RUNNABLE
main Thread-2 11 10 TIMED_WAITING RUNNABLE
main Thread#3 12 1 TIMED_WAITING RUNNABLE
main Thread-4 13 10 TIMED_WAITING RUNNABLE
main Thread-5 14 1 TIMED_WAITING RUNNABLE
main Thread#6 15 10 TIMED_WAITING RUNNABLE
main Thread-7 16 5 TIMED_WAITING RUNNABLE
main Thread-8 17 10 TIMED_WAITING RUNNABLE
main Thread#9 18 1 TIMED_WAITING RUNNABLE
main Thread#0 9 10 BLOCKED TIMED_WAITING
main Thread-1 10 1 TERMINATED TIMED_WAITING
main Thread-2 11 10 TERMINATED TIMED_WAITING
main Thread#3 12 1 TERMINATED TIMED_WAITING
main Thread-4 13 10 TERMINATED TIMED_WAITING
main Thread-5 14 1 TERMINATED TIMED_WAITING
main Thread#6 15 10 TERMINATED TIMED_WAITING
main Thread-7 16 5 TERMINATED TIMED_WAITING
main Thread-8 17 10 TERMINATED TIMED_WAITING
main Thread#9 18 1 TERMINATED TIMED_WAITING
运行结果并不是固定不变的,每次运行结果都不太一样。
在程序中,这几个重要的方法都演示到了:
- 通过
Thread
的setName
设置线程的线程名,以及getName
获取线程名。 - 通过
Thread
的getId
获取线程的id。 - 通过
Thread
的setPriority
设置线程的优先级,以及getPriority
获取线程的优先级。 - 通过
Thread
的getState
获取线程的状态,但并没有提供对应的set方法给我们设置线程的状态,毕竟线程的调度都是由线程调度器决定的。