多线程笔记

1. 进程和线程的区别

(1) 根本区别:进程作为资源分配的单位,线程调度和执行的单位

 

2. java 下实现多线程

(1) 继承Thread  重写run

实用线程:创建子类对象+调用.statt()方法。

(2) 实现Runnable接口+重写run()方法

① 静态代理 设计模型

//接口  

 多线程笔记

//真实角色

 多线程笔记

//代理角色

多线程笔记

 ②实现接口,实现动态代理

 多线程笔记

总结:1.推荐使用接口,避免单继承局限性

             2.便于共享资源

 3Callable接口可以有返回值,可以抛异常

  重写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