Java
2021-01-21 16:35:39 115 举报
AI智能生成
java
作者其他创作
大纲/内容
线程
状态
新建状态(New)---Thread thread = new Thread()。
就绪状态(Runnable)---thread.start()
运行状态(Running)
线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
阻塞状态(Blocked)
因为某种原因放弃CPU使用权,暂时停止运行。
直到线程进入就绪状态,才有机会转到运行状态
直到线程进入就绪状态,才有机会转到运行状态
阻塞的情况
等待阻塞
调用线程的wait()方法,让线程等待某工作的完成
同步阻塞
线程在获取synchronized同步锁失败
其他阻塞
通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。
当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,
线程重新转入就绪状态。
当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,
线程重新转入就绪状态。
死亡状态(Dead)
线程执行完了或者因异常退出了run()方法,该线程结束生命周期
创建
继承Thread类
实现Runnable接口
使用Callable和Future
线程池
状态
Running
01) 状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。
(02) 状态切换:线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态!
道理很简单,在ctl的初始化代码中(如下),就将它初始化为RUNNING状态,并且"任务数量"初始化为0。
(02) 状态切换:线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态!
道理很简单,在ctl的初始化代码中(如下),就将它初始化为RUNNING状态,并且"任务数量"初始化为0。
Shutdown
(01) 状态说明:线程池处在SHUTDOWN状态时,不接收新任务,但能处理已添加的任务。
(02) 状态切换:调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN。
(02) 状态切换:调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN。
Stop
(01) 状态说明:线程池处在STOP状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务。
(02) 状态切换:调用线程池的shutdownNow()接口时,线程池由(RUNNING or SHUTDOWN ) -> STOP。
(02) 状态切换:调用线程池的shutdownNow()接口时,线程池由(RUNNING or SHUTDOWN ) -> STOP。
Tidying
(01) 状态说明:当所有的任务已终止,ctl记录的"任务数量"为0,线程池会变为TIDYING状态。当线程池变为TIDYING状态时,会执行钩子函数terminated ()。terminated()在ThreadPoolExecutor类中是空的,若用户想在线程池变为TIDYING时,进行相应的处理;可以通过重载terminated()函数来实现。
(02) 状态切换:当线程池在SHUTDOWN状态下,阻塞队列为空并且线程池中执行的任务也为空时,就会由 SHUTDOWN -> TIDYING。
当线程池在STOP状态下,线程池中执行的任务为空时,就会由STOP -> TIDYING。
(02) 状态切换:当线程池在SHUTDOWN状态下,阻塞队列为空并且线程池中执行的任务也为空时,就会由 SHUTDOWN -> TIDYING。
当线程池在STOP状态下,线程池中执行的任务为空时,就会由STOP -> TIDYING。
Terminated
(01) 状态说明:线程池彻底终止,就变成TERMINATED状态。
(02) 状态切换:线程池处在TIDYING状态时,执行完terminated()之后,就会由 TIDYING -> TERMINATED。
(02) 状态切换:线程池处在TIDYING状态时,执行完terminated()之后,就会由 TIDYING -> TERMINATED。
创建
通过Executors工厂方法创建
通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)自定义创建
泛型
简介
JDK 5中引入,泛型提供了编译时类型安全监测机制
使用方式
泛型类,泛型接口和泛型方法
泛型类
泛型类
* Java库中 E表示集合的元素类型,K 和 V分别表示表的关键字与值的类型
* T(需要时还可以用临近的字母 U 和 S)表示“任意类型”
* Java库中 E表示集合的元素类型,K 和 V分别表示表的关键字与值的类型
* T(需要时还可以用临近的字母 U 和 S)表示“任意类型”
泛型上下限
<? entend xObject>
<? super xObject>
注解反射
反射
在运行时需要一些类的信息,可以通过反射来动态获取并且修改,通过反射可以做很多事情,重点还是获取Class对象,
然后就可以获取实例、访问方法、修改变量等等
然后就可以获取实例、访问方法、修改变量等等
注解
也称为元数据,在代码中添加信息提供了一种形式化的方法,注解在一定程度上是在把元数据与源代码文件结合在一起。
能够以编译器来测试和验证的的格式,存储有关程序的额外信息
用来生成描述符文件,或新的类定义
有助于减轻编写“样板”代码的负担
将元数据保存在Java源代码中,利用annotation API为自己的注解构造处理工具
能够以编译器来测试和验证的的格式,存储有关程序的额外信息
用来生成描述符文件,或新的类定义
有助于减轻编写“样板”代码的负担
将元数据保存在Java源代码中,利用annotation API为自己的注解构造处理工具
0 条评论
下一页