java八股!3
文章目录
- java序列化与反序列化
- java创建线程有几种方式
- 线程的生命周期
- run方法和start方法的区别?可以直接调用run方法吗
java序列化与反序列化
序列化是指可以将对象转换成字节序列,可以保存在磁盘上,也可以在网络中运输。并允许程序将这些字节序列再次恢复成原来的对象的过程叫反序列化。
若对象要实现序列化,需要继承Serializable接口,是一个标记接口,没有提供任何实现方法,只是用来标记该类可以序列化。
若实现序列化,可以通过对象流ObjectInputStream和ObjectOutputStream对象的writeObject的方法以输出序列化的对象和对字节流反序列化转换成对象。
java创建线程有几种方式
三种,继承Thread类(需要重写run函数),实现runnable接口,使用executor框架创建线程池,把线程的生命周期交给线程池管理
线程的生命周期
创建线程:使用new Thread()
runnable状态(就绪),线程已经比启动,等待系统资源以便运行,调用start函数后就进入就绪状态
running状态,线程正在运行中,开始执行run中的代码
blocked(阻塞状态):线程可能处于等待io完成状态,或者等待资源释放,处于阻塞状态
waiting(等待状态):线程进入等待状态,可以通过调用object.wait(),Thread.join()等方式进入,等待其他线程唤醒
超时等待:线程等待一段时间,当时间到达或者满足某种条件时,就会进入就绪状态,通过thread.sleep(), Object.wait(timeout)等方式可以进入超时等待状态
终止:线程执行完run方法或者因抛出异常而退出的时候进入中止状态,此时线程不再可以切换到其他状态了
run方法和start方法的区别?可以直接调用run方法吗
run方法是直接在当前进程的上下文中执行的,并不会创建新的进程,start方法是启动一个新线程,线程处于就绪状态,并分配好cpu资源的时候,会在新线程中执行run方法。