1、ObjectInputStream
反序列化。
(1)构造函数
ObjectInputStream(InputStream in) 创建从指定的InputStream读取的ObjectInputStream
(2)主要方法
Object readObject() 从ObjectInputStream读取一个对象
2、POI 实现对word、Excel等文件操作
Apache–Download 安装包,根据操作系统
例如windows .zip
导包–build path->configure build path->add external jars
3、多线程简介
进程:系统资源分配的单位。(cpu 磁盘 内存 网络)
线程:独立调度和分配的基本单位,共享进程资源
一个进程 包含多个线程,用来完成不同的工作,称之为多线程
进程是为了提高系统资源的利用率和系统吞吐量
线程是为了减少程序在并发执行时付出的时空开销
4、线程的使用
(1)继承 thread 类
public class Thread extends Object implements Runnable
a、Thread类构造函数
Thread()
分配一个新的 Thread对象
Thread(String name)
分配一个新的 Thread对象
主要方法:
void run()
主要是运行线程所负责的主要任务
void setName(String name)
将此线程的名称更改为等于参数 name
void setPriority(int newPriority)
更改此线程的优先级
start()
导致此线程开始执行; Java虚拟机调用此线程的run方法
void setDaemon(boolean on)
将此线程标记为 daemon线程或用户线程
static Thread currentThread() 返回对当前正在执行的线程对象的引用
b、声明方式:
public class 线程类名 extends Thread{
//重写run方法
public void run(){
}
}
c、调用和开启线程
线程类名 初始化
线程类名.start();
start() 导致此线程开始执行; Java虚拟机调用此线程的run方法
(2)实现Runnable接口
Interface Runnable
void run()
当实现接口的对象 Runnable被用来创建一个线程
启动线程使对象的 run在独立执行的线程中调用的方法
public class 线程名 implements Runnable{
//实现 run方法
public void run(){
}
}
a、建立一个类实现runnable的接口
b、使用参数为Runnable对象的Thread构造方法。–Thread(Runnable target) 分配一个新的 Thread对象
c、 调用 start方法 开启线程
5、线程的优先级
默认的线程优先级:5
线程优先级最高为:10
最低的优先级为:1
优先级指的是一种概率
6、守护线程
用户线程:User Thread
守护线程:Daemon Thread :主要提供服务的,为其他线程。比如 gc 垃圾回收线程
守护线程主要是在用户线程都执行完的情况下执行,如果没有用户线程执行,守护线程自动退出
7、窗口卖票小案例
卖票 是针对同一个票额 同一个票库,两个线程同时访问
抢占资源,同一张票 卖给多个人
等待
保证数据在任何时刻只有一个线程访问,保证数据的完整性
8、线程的同步
锁机制
(1)同步代码块
static{} {}
synchronized(){
//代码
}—-同步代码块
(2)同步方法
synchronized 修饰的方法
(3)互斥锁
lock,保证数据的完整性 一山不容二虎
ReentrantLock
构造方法–ReentrantLock() 创建一个 ReentrantLock的实例
主要方法:
void lock() 获得锁
void unlock() 尝试释放此锁
9、线程的wait和notify
wait:线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()方法
notify:唤醒正在等待对象监视器的单个线程
notifyall:唤醒正在等待对象监视器的所有线程
sleep:long—睡眠时间 Thread类自带的方法—-自然醒
wait:继承于object的方法—-被叫醒
10、线程池概述
多个线程运行时运行机制,包括排队策略 包括线程存活时间,框架策略。
管理 创建 释放
11、线程池使用
ThreadpoolExecutor
(1)构造方法
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue)
corePoolSize:核心池
maximumPoolSize:线程池最大线程数
keepAliveTime:线程没有任务执行时,最多多长时间会终止。>corePoolSize 起作用
TimeUnit:keepAliveTime的时间单位
workQueue:用于存放待执行的任务
ArrayBlockingQueue、LInkedBlockingQueue、SynchronousQueue等
10个工人 一个工人同时做一个任务;
10个人都在干活,还有任务来了,任务排队
活太多,最多招5个人,
15个人还是赶不过来。放弃任务
额外找来的5个人,3个月后辞去,还是10个人干活
corePoolSize:10
maximumPoolSize:15
keepAliveTime:3个月
(2)主要方法
void execute(Runnable command) 在将来某个时候执行给定的任务
submit 提交任务
shutdown:关闭线程池。
shutdownnow:立即关闭