高并发编程详解
第一章 快速认识线程
1.Thread源码中start方法中的会对线程状态进行判断(该状态是由jvm控制的,源码中看不到对状态改变赋枚举值这部分的代码)
threadStatus的状态由JVM控制。
2.线程的执行单元就是run方法。创建线程只有一种方式就是构造Thread对象然后调用.start()才算是创建了一个线程。如果一个类继承Thread时就会重写Thread类的run方法,如果这个类实现了runable,就要实现run方法,并且这个类没有start方法,还是要构造一个Thread对象,并且将该对象作为Thread对象的构造参数传入(高内聚,低耦合思想),源码中thread中的run方法会先判断是否有构造参数runable,有的话就执行runable的执行单元run方法,没有的话就什么都不做,
3使用到的第一个设计模式---------------------------策略模式
Thread和runable的目的是为了将线程控制(start…)和业务逻辑(run)分割开,这使用了一种设计模式(策略模式)。一种应用场景:不同系统对我们权限系统请求要求返回不同格式的数据,权限系统可以一个接口,实现这个接口的类,分为多种,不同的了类实现不同的数据格式转换。
第二章 深入理解Thread的构造函数
1.Thread的构造函数中都会执行一个init方法在这个方法中用一个currentThread()(获取当前线程),但是此时我们只是构造一个线程对象并不是一个线程,所以说当前线程就是创建我们线程对象的一个已经存在线程(默认是jvm启动的main线程),也就是说,每一个线程都是由另一个线程创建的,也就是说每一个线程都是有一个创建他的父线程。
2.如果构建thread对象时不指定线程组的话,就会在对象执行start方法的时候将线程本身加入父线程所在的线程组中
3.Init方法中有一个特殊的的方法参数(stackSize 可以通过jvm -Xss设置大小,默认是0),这个参数对应的就是jvm内存模型中的虚拟机栈,线程私有的,在jvm运行时动态创建的,它的大小反映了线程方法调用的层次深度(栈的特性ÿ