java多线程学习笔记(二)

来源:互联网 发布:java程序调试的步骤 编辑:程序博客网 时间:2024/06/12 03:40

将笔者学习多线程的一些笔记发出来,方便读者学习,以前总是索取,不知道回报,希望我的一些经历经验,会帮助到正在学习的你,也希望大家能一起讨论,共同学习。(如果有问题,可以留言,笔者会尽快处理,如果有出错,希望您能指出,大家共同学习)

8、  线程的状态

Ø  初始状态

使用new关键字创建一个线程,则线程就处理初始状态。

Ø  就绪状态

创建线程后,需要我们手动调用start方法,来开启线程,start方法会新建一个线程并让这个线程执行run方法。有的同学可能不理解,为什么不直接调用run方法,请记住调用run来开启新线程,它只会在当前的线程中,串行的执行run的方法。

Ø  运行状态

调用start方法后,其实不会立刻的运行线程,必须排队,等待cpu来执行。当cpu真的处理当前的线程了,线程才处于运行状态

Ø  阻塞状态

阻塞状态就是线程被中断了,但是没有终止,可以在某些条件下继续运行。比如:

调用Thread.interrupt()方法,他会通知线程中断,但是线程不一定会中断,需要我们自己处理中断的逻辑。

调用Thread.sleep()方法,线程会处于睡眠状态,一般会设置睡眠时间,到时间后,会自动重新运行。

调用Thread.wait()方法,线程会处于等待状态,知道其他线程调用notity()方法,才可以继续运行。

调用Thread.join()方法,线程会一直阻塞,直到目标线程执行完成。(join的本质是让调用线程wait方法在当前线程对象实例上)。

调用Thread.yeild()方法,线程会让出cpu,但是还是会竞争cpu,只是一种谦让。可以用在重要工作完成后,对cpu资源的一种谦让。

Ø  死亡状态

Run方法执行完成或出现异常情况,线程便结束了,也就进入了死亡状态。还有一种方式可以让线程处于死亡状态,那就是调用Thread.stop()方法。

笔者提醒,最好不要使用stop方法来停止线程,会引起一些意想不到的事情。如果需要停止一个线程,可以使用一个变量作为开关来停止线程。