Java线程同步
来源:互联网 发布:专升本网络教育 编辑:程序博客网 时间:2024/06/05 22:49
1.线程同步
1)通讯模型:监视线程通讯模型:同时多个独立线程在运动,其运行时的状态由第三方监控线程全程监控,这就是监视线程通讯模型
2)线程同步:为什么要进行线程同步:多线程存在的问题是,假如同时有多个线程操作一个对象的数据,有可能出现线程对象对自己操作
的数据不同步的情况,也就是说可能会导致运算结果出现错误。
3)线程同步问题的解决方案:使用synchronized关键字来解决,解决的方式是通过锁定对象或者方法来完成线程的同步操作
对方法进行同步锁:
public synchronized void say(){}
如上格式,此方法就被同步锁了,当一个线程操作此方法时,其他的线程则不能操作此方法,只有等当前线程操作完此方法,其他线程
才能对此方法进行操作
对对象进行同步锁:
public void run() {synchronized(list){while(true){if(list.size()==0){Phone phone = new Phone();list.add(phone);System.out.println("生产者生产了一部手机,型号为:phone"+type);list.notify();type++;}else{try {list.wait();} catch (InterruptedException e) {e.printStackTrace();}}try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}}当一个线程对当前对象进行操作时,其他线程则不能同时操作
2.生产者消费者模型实现
1)模型的概念:生产线程和消费线程共同操作一个集合,生产者放入对象,消费者取出对象,当集合中没有对象时,生产线程马上回放入一个
对象,而当集合中又对象时,消费者马上会取出一个对象
2) 在java中,每个对象都有从Object父类继承而来的两个关于线程间通讯的方法wait()和notify(),如其方法名所示,一个是等待,一个是通知,当在一个对象上调用wait()方法时,当前线程就会进行wait状态,直到收到另一个对象的notify()发出通知,才会执行下一步计算,在多线程通讯中,经常会用对象的这两个方法,一个典型的案例就是“生产/消费者模型”。
3)注意:wait和notify必须在同步锁之内使用
同步锁锁定对象和wait、notify对象必须同一个
同步锁锁定对象和wait、notify对象必须同一个
当对象wait挂起状态时候是会释放同步锁的
3.线程的生命周期
1)当线程调用start()方法时,线程处于就绪状态,并尝试着来获取CPU的权限,当获得了CPU的权限后就开始运行。
2)当运行时调用sleep(),join(),方法时,线程就会睡眠,时间是方法里面的参数决定,当睡眠时间到了时,便重新回到就绪状态
3)当在运行时调用wait()方法,线程会进入等待状态,当另一个与当前线程进行的通信的线程调用了notify()方法,通知了还在
等待的线程后,这个等待的线程就会开始运行
4)当使用了同步锁,其他线程将会被阻塞,只有当前线程执行完后,其他线程才会运行
5)当线程的run方法执行完毕后,线程死亡
0 0
- JAVA线程-JAVA同步
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步块
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步块
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步块
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步块
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步块
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步块
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步块
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步方法
- hexo + github pages 搭建个人博客
- 折线分割平面hdu2050
- 正则化原理
- 二、swift3.0常量和变量+流程控制
- ubuntu16.04 安装Code::Blocks
- Java线程同步
- Python调用Matlab的混合编程
- 编写第一个sping
- java.lang.NullPointerException at com.genuitec.eclipse.ast.deploy.core.Deployment
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- 常识知识
- linux基础小知识(3)--static与externx
- 面向对象—static关键字
- sqlserver镜像不同步了