Java线程学习笔记(二)

补充:线程的四种状态:创建(New)、可运行(Runnable)、阻塞(Blocked)和死亡(Dead)

Runing属于可运行状态的一种

 

 一、线程的结束方式

  1. 让线程的run()方法执行完,线程自然结束。(这种方法最好)。
  2. 通过轮询和共享标志位的方法来结束线程,例如while(flag){},flag的初始值设为真,当需要结束时,将flag的值设为false(这种方法也不是很好,因为如果while(flag){}方法阻塞了则flag会失效。
  3. 线程抛出一个为捕获(Catch)到的Exception或Error,通过调用interrupt方法和捕获InterruptedException异常终止线程。
  4. 利用线程池当线程不用了,就让它sleep并放进队列中,这样可以最大限度利用资源

二、线程的控制

1)  测试线程 isAlive() 如果线程存活就会返回true(即start()调用过),否则就会返回false,、即是线程死亡,或者该线程是个新线程,未调用过start()方法。

2)中断线程 Thread.sleep():线程暂时终止执行(睡眠)一定的时间。在sleep()方法指定的睡眠时间内一定不会再得到运行机会,直到它的睡眠时间完成。

            Thread.yield():线程放弃运行,将CPU控制权让出。yield()方法让出控制权后,还有可能马上被系统的调用机制选中运行。比如当执行yield()方法的线程优先级高于其他的线程。

3)设置线程优先级

getPriority():获得运行优先级。

setPriority():设置线程的运行的优先级。

每个线程都有一个优先级,存储在NORM_PRIORITY中,他的值为5。MIN_PRIORITY储存了最小优先级,MAX_PRIORITY储存了最大优先级。分别为1和10。

当一个线程执行yield(),让出控制权,高优先级优先取得控制权。相同优先级,则取决于线程调度程序对这些线程的仲裁。

4)Thread.join()通常由使用线程的程序调用,在调用的线程结束之前主线程一直处于阻塞状态。

猜你喜欢

转载自blog.csdn.net/qq_41105058/article/details/81102585