线程同步、通信
来源:互联网 发布:网络效果图制作 编辑:程序博客网 时间:2024/06/01 16:50
<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">线程同步,当两个线程同时访问一个对象时,出现同步问题。使用关键字:synchronized</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">解决同步有两种:1、 同步方法2、同步代码</span>
</pre><pre name="code" class="java"><pre name="code" class="html"><span style="font-size:18px;">synchronized(t){for(int i=0;i<10;i++){t.a = t.a +i;System.out.println(this.getName()+"a======"+t.a);try {Thread.sleep(1);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}</span>
线程通信,多个线程同时访问一个对象时,存在同步,这时,就存在线程通信,当一个线程在执行时,另一个线程处在等待的过程中,当这个线程执行完成后,就会通知另一个线程去执行。典型的模型就是“生产消费模型”。简单地说:此模型的规则就是,一个放东西,一个拿东西,只有当放好了的时候才能拿。具体解释是:生产和消费线程共同操作一个集合,生产线程放入对象,消费线程取出对象!仅当集合中没有对象时,生产线程会放入一个对象,如有集合中有一个对象时,消费线程要马上取出这个对象。
public void run() {super.run();synchronized (ProductThread.list) {while (true) {// 判断仓库是否还有手机if (ProductThread.list.size() == 0) {try {<strong style="background-color: rgb(51, 255, 255);">ProductThread.list.wait();</strong>} catch (InterruptedException e) {e.printStackTrace();}}// 从队列中移出一个手机MiPhone mp = ProductThread.list.remove(0);System.out.println("销售人员卖出了一个手机,手机型号为:" + mp.getName());try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 提醒生产者,手机买完了,你必须继续生产<span style="color:#ff6666;"><strong style="background-color: rgb(102, 255, 255);">ProductThread.list.notify();</strong></span>}
super.run();synchronized(list){//不停执行,生产手机while(true){if(list.size()>10){try {<strong style="background-color: rgb(51, 255, 255);">list.wait();</strong>} catch (InterruptedException e) {e.printStackTrace();}}MiPhone mp = new MiPhone();mp.setName("小米"+count);count++;//把生产出来的手机添加到仓库list中list.add(mp);System.out.println("生产商,生产了一个小米手机,手机型号是:"+mp.getName());try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}<strong style="background-color: rgb(51, 255, 255);">//提醒消费者,手机已经生产完成,可以进行销售 list.notify();</strong>}需要注意的是1、wait和notify必须在同步锁之内使用
2、同步锁锁定对象和wait、notify对象必须同一个
3、当对象wait挂起状态时候是会释放同步锁的
0 0
- 线程通信和同步
- 线程同步通信
- 同步,线程通信,lock
- 线程同步通信
- 线程之同步通信
- 线程同步通信
- 线程同步与通信
- 线程同步、通信
- 线程 进程 同步 通信
- Thread02:线程同步通信
- 进程通信&线程同步
- 4、线程同步通信
- 线程同步--线程间通信
- 线程同步--线程间通信
- 线程同步和线程通信
- 5.9 线程通信的同步
- 进程线程同步 进程通信
- JAVA线程同步、通信、中断
- 《项目——网络音乐播放器》——网络请求之for循环内嵌套的try...catch...里面放break
- 使用Java操作记事本
- Building Linux with yum utility
- 线程与多线程
- 算法复杂度
- 线程同步、通信
- java学习---String、StringBuffer与StringBuilder之间区别
- User Header Search Paths 与 Header Search Paths
- MYSQL获取自增主键【4种方法】
- Windows 系统快捷
- 数字加网(二)— —调幅加网算法及实现
- Little's Law(利特尔法则)的简要证明和重要应用(2012年某公司实习生招聘笔试试题)
- 平面4点最小距离
- Java快捷---Eclipse快捷方式