------- android培训、java培训、期待与您交流! ----------
首先Java的线程机制是依靠Thread类实现的。
建立一个Java线程对象的方式有两种:
第一种:继承java.lang包中的Thread类,并覆盖其run()方法;
第二种:创建实现Runnable接口的类,将这个的对象作为参数传给Thread类的构造函数。
Thread对象创建完成后,只是意味着线程的存在。现在的线程还不是一般意义上的线程。
通过调用Thread对象的start()方法使它完成最后的一步,成为真正的线程。
那么这个线程与我们调用start()方法之前线程对象有什么不同呢?这就涉及到了Java对线程状态
的定义。
在Java语言标准中给线程定义了六种状态:新生,可运行,被阻塞,不计时等待,计时等待,死亡。
这些状态之间的转换如下图所示:
对于每个状态的解释:
1.新生:每个线程在创建完成后就是这个状态,此状态的含义是预备;
2.可运行:这个状态的进程具有执行权,但需要注意的是此时的线程并不一定在运行,线程是否运行依赖于系统,调用start()方法使线程从新生态进入本状态;
3.被阻塞:当进程需要等待获得对象锁时进入被阻塞状态,调度器允许本线程获得锁时离开这个状态;
4.计时等待、不计时等待:当线程等待另一个线程通知调度器条件时,线程进入等待状态。