多线程总结
来源:互联网 发布:数据新常态 编辑:程序博客网 时间:2024/06/03 17:43
1 , 线程的生命周期
创建 ----> 就绪 ----> 运行 ---> 结束
1, 创建线程,通过自定义类继承Thread类,或者实现runnable接口, 复写run方法, 创建自定义线程
2, 当执行start()方法, 该线程进入就绪状态, 但是并没有执行, 有执行资格,但是还没有执行权 , 需要抢到CUP资源才有执行权
3, 当该线程抢到CUP资源, 就开始运行, 对于单核服务器 , 同一时间只有一个线程在运行,除非是多核处理器 , 当一个线程在运行, 其他线程均处于就绪等待状态
4, 运行的线程 , 当run方法结束 ,或者执行了stop() ,interrupt()方法 , 该线程即结束
5, 运行中的线程可通过wait().Sleep() 方法进入阻塞状态 , 通过notify() 方法唤醒阻塞状态的线程, 该线程进入就绪状态, 重新开始等待, 获取CUP执行权, 才有资格执行 .
2 , 线程安全问题
1 , 线程安全问题产生的环境
1) 是否多线程环境2) 是否有共享数据 3) 是否有多条语句同时操作共享数据
2 , 解决方案 (同步)
我们无法修改多线程环境 , 无法修改共享数据 , 可以考虑解决多条语句同时操作共享数据的问题 , 如果让某个线程操作共享数据的时候, 其他线程不能操作共享数据 , 就可以解决线程安全问题 , 可以对多条语句操作共享数据的代码进行处理 , java已经已经提供了使用同步代码块的方式解决 ,
Synchronized(对象){
// 需要同步的代码
}
1) 该对象如同一把锁, 如果是同一个对象 , 则是同一把锁 , 如果使用不同的对象 , 则仍然无法解决线程安全问题 , 就好像一个房间开了多个门一样, 每个们都可以同时进出
2) 需要同步的代码, 即为多条语句操作共享数据的代码
3 , 同步的不同场景应用
同步不仅可以同步代码块 , 还可以同步方法 , 同步方法是将synchronized关键字加到方法上 , 静态方法同理是加在方法上 , 为了保证线程安全, 必须使锁是同一把锁 , 同步代码块的锁 , 同步方法的锁, 同步静态方法的锁是不同的
1) 同步代码块的锁是任意对象, 但是必须保证锁是同一把
2) 同步方法的锁 , 是this对象
3) 同步静态方法的锁 , 是当前类的class对象
3 , 线程死锁问题
通过同步代码块,同步方法, 同步静态方法 可以解决线程安全问题 , 当解决线程安全问题后, 会留下效率慢的问题, 死锁问题 .
死锁问题 : 就是两个或两个以上的线程因为争抢系统资源, 出现相互等待的情况, 使系统停止4 , 线程通信
当不同类型的线程, 不同方向的线程, 操作同一个资源, 例如生产者和消费者,此时必须让资源为同一个资源,防止生产者生产的是馒头,而消费者只想买包子的问题发生
5 , 生产者和消费者问题
- 多线程总结--多线程介绍
- 多线程_多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结:
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- 多线程总结
- Tomcat配置虚拟路径,使上传文件与服务器及工程文件分离开
- pig自定义函数
- Java Calendar和Date使用
- Linux中文件描述符fb和文件指针FILE*的区别
- 山东省第八届ACM省赛 F 题(quadratic equation)
- 多线程总结
- 深度学习(二)Sparse Filtering稀疏滤波
- Min Stack 解题报告
- Git window安装教程
- hr设置线条颜色
- centos下Apache服务器ThinkPHP伪静态的设置方法
- python编写PSO算法
- java项目使用pageHelper做分页
- Myeclipse安装AspectJ插件