004-线程同步问题引出、同步问题解决、死锁、生产者与消费者
2017-09-25 21:22
477 查看
一、同步问题引出
1、示例:
package com.lhx.thread.impl; class Info { private String title; private String content; private boolean flag = true; // flag true 表示生产数据,但是不允许取走数据 // flag false 表示取走数据,但是不允许生产数据 public synchronized void set(String title, String content) { if (flag == false) { try { super.wait();// 等待 } catch (InterruptedException e) { e.printStackTrace(); } } this.title = title; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } this.content = content; flag = false; super.notify(); } public synchronized void get() { if (flag == true) {// 此时应该生产 try { super.wait();// 等待 } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(title + "-->" + content); flag = true; super.notify(); } } class Productor implements Runnable { private Info info = null; public Productor(Info info) { this.info = info; } @Override public void run() { for (int i = 0; i < 50; i++) if (i % 2 == 0) { this.info.set("张三", "衰哥"); } else { this.info.set("李四", "帅哥"); } } } class Consumer implements Runnable { private Info info = null; public Consumer(Info info) { this.info = info; } public void run() { for (int i = 0; i < 50; i++) { info.get(); } } } public class TestDemo2 { public static void main(String[] args) throws Exception { Info info = new Info(); Productor productor = new Productor(info); Consumer consumer = new Consumer(info); new Thread(productor).start(); new Thread(consumer).start(); } }
View Code
解释一下sleep和wait区别
sleep 是thread类定义的方法,在休眠到一定时间之后将自己唤醒
wait是object类定义的方法,表示线程等待执行,必须通过notify()、notifyAll()来进行唤醒
相关文章推荐
- 线程同步2 ------ 用条件变量来解决生产者消费者问题
- java多线程(同步与死锁问题,生产者与消费者问题)
- 利用线程的同步和互斥解决两个消费者两个生产者一个临界区问题
- java多线程(同步和死锁,生产者和消费者问题)
- 用信号量做进程同步解决生产者和消费者遇到的奇怪问题
- 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结
- java多线程(同步与死锁问题,生产者与消费者问题)
- 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结
- Lock同步锁完美搞定生产者与消费者死锁问题
- 多线程_生产者消费者题代码2并解决线程安全问题
- Java多线程之生产者消费者问题<二>:使用重入锁、条件变量优雅地解决生产者消费者问题
- 多线程——生产者与消费者(多)1.5新锁,问题解决
- Java多线程之生产者消费者问题<一>:使用synchronized 关键字解决生产者消费者问题
- 操作系统经典同步互斥问题——生产者消费者问题
- 线程同步生产者消费者问题
- 进程同步---生产者与消费者问题以及进程同步机制--信号量及P、V操作
- System V共享内存与信号量综合应用之生产者与消费者问题解决
- [java线程同步]生产者消费者问题demo
- 经典同步问题(一)---生产者与消费者问题
- Java经典线程同步问题------生产者与消费者