多线程
进程
进程是系统资源分配的单位,执行程序的一次执行过程,它是一个动态的概念,他通常包含多个线程
线程
线程可分为用户线程和守护线程,虚拟机必须确保用户线程执行完毕,不用等待守护线程执行完毕,如:后台记录操作日志,内存监控,垃圾回收等
创建线程的三种方法
- 继承Thread类(子类对象.start())
- 实现Runnable接口((Thread)目标对象.start())
- 实现callable接口(创建服务,提交执行,获取结果,关闭服务)
run()和start()
run()启动只有一个主线程
start()才能启动多线程同步运行
静态代理模式
真实对象和代理对象要实现同一个接口,代理对象可在真实对象执行前后进行一些操作
Java lamda表达式
(参数列表)-> {代码块}
参数列表是抽象方法的参数,代码块是抽象方法的实现代码
线程的五个状态
线程只能启动一次,死亡之后不能在启动
线程休眠
Thread.sleep()
线程礼让
Thread.yield()(礼让不一定成功)
线程插队
Thread.join()
线程优先级
1~10(越高越先执行)
线程同步(队列+锁)
**并发:**多个对象访问同一个目标
synchronized修饰符,synchronized方法必须获得锁才能操作
synchronized与Lock对比
- Lock是显示锁(需要手动开启和关闭),而synchronized是隐式锁,会自动操作
- Lock只有代码块锁,synchronized有代码块和方法锁
- 使用Lock锁,JVM将花费较少的时间来调度线程,性能更好
线程池
思路
提前创建好多个线程,放入线程池中,使用时直接获取,使用完再放回池中,可以避免频繁创建销毁,实现重复利用
好处
- 提高响应速度
- 降低资源消耗
- 便于线程管理