首页 > 编程语言 > 详细

《深入浅出Java多线程》系列文章学习

时间:2021-09-07 00:17:08      阅读:21      评论:0      收藏:0      [点我收藏+]

第一章 基础篇

1.进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位,即CPU分配时间的单位。

2.Java中的优先级来说不是特别的可靠,Java程序中对线程所设置的优先级只是给操作系统一个建议,操作系统不一定会采纳。而真正的调用顺序,是由操作系统的线程调度算法决定的。

3.反复调用同一个线程的start()方法是否可行?假如一个线程执行完毕(此时处于TERMINATED状态),再次调用这个线程的start()方法是否可行?

  答:不可行。重复调用start()方法会抛出IllegalThreadStateException异常。这部分内容可参考代码

// 省略相关package和import信息
public
class ThreadStateDemo { public static void main(String[] args) { startTwice(); } /** * 调用start方法两次 * * 查看java.lang.Thread#start()源码可以发现,其内部有一个变量threadStatus * 若该值不为0,会直接抛出java.lang.IllegalThreadStateException异常 * 下方demo,第一次调用start()方法,变量threadStatus值为0 * 第二次调用start()方法,变量threadStatus的值不为0,直接抛异常 */ private static void startTwice() { Thread thread = new Thread(() -> {}); thread.start(); // 第二次调用时,会抛出java.lang.IllegalThreadStateException异常 thread.start(); } }

 

4.Java线程的6个状态

// Thread.State 源码
public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;
}

线程状态转换见下图:

技术分享图片

 

 5.关于Object.wait()和Thread.sleep(long):前者会释放锁,后者不释放锁。

 

 

参考内容

http://concurrent.redspider.group/RedSpider.html

《深入浅出Java多线程》系列文章学习

原文:https://www.cnblogs.com/xm66/p/15229467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!