多线程笔记
1. 进程和线程的区别
(1) 根本区别:进程作为资源分配的单位,线程调度和执行的单位
2. java 下实现多线程
(1) 继承Thread 重写run。
实用线程:创建子类对象+调用.statt()方法。
(2) 实现Runnable接口+重写run()方法
① 静态代理 设计模型
//接口
//真实角色
//代理角色
②实现接口,实现动态代理
总结:1.推荐使用接口,避免单继承局限性
2.便于共享资源
(3)Callable接口可以有返回值,可以抛异常
重写call()
3. 线程的状态
(1) 新生状态
(2) 就绪状态
(3) 运行状态
(4) 阻塞状态
(5) 死亡状态
① 停止状态
建议使用:(1.外部终止2.自然结束)自带的方法具有不确定性。
② 阻塞状态
Join 合并线程-à等待该线程终止
Yield 暂停自己线程 写在哪里暂停哪里线程-à静态方法
Sleep 休眠,不释放锁
1)与时间相关
2)模拟网络延迟
4.同步:并发
保证:线程安全 多线程下
Synchronize----à同步
① 同步块
Synchronized(类.class|引用类型|this){
}
② 同步方法
总结:锁的范围不宜过小---à导致线程不安全
锁的范围不宜过大--à影响效率
一个简单的单例模式----》 是线程不安全的
不仅线程安全,而且效率高(双重检查)
另一种单例的优化
注意:过多的同步锁,容易造成死锁。
4. 生产者消费者模式
生产者消费者是为了解决多线程中容易死锁的问题。
Wait()+notify()+Synchronized 配合使用
5. 任务调度
① 一个简单的任务调度Demo
② Quartz 第三方jar包
希望能帮到大家。大家如果有兴趣可以来我的网站看看:http://www.jiegelo.com