Java 线程同步 生产消费问题
2016-04-11 11:34
363 查看
class SynStack { int index=0; //表示数组有效元素个数 char[] data = new char[6]; public synchronized void push(char c) { while(index==data.length) //data.length=6 { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); data[index]=c; index++; System.out.println("正在生产第"+index+"商品"+data[index-1]); }
public synchronized char pop() { while(index==0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index--; System.out.println("正在消费第"+(index+1)+"商品"+data[index]); return data[index]; } }
class Producer implements Runnable { SynStack s; public Producer(SynStack s) { this.s=s; } @Override public void run() { for(int i=0;i<20;i++) { s.push((char)('a'+i)); } } }
class Consumer implements Runnable { SynStack s; public Consumer(SynStack s) { this.s=s; } public void run() { for(int i=0;i<20;i++) { s.pop(); } } }
public class Test { private static final int key = 0; public static void main(String[] args) { SynStack ss = new SynStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); Thread t1 = new Thread(p); Thread t2 = new Thread(c); t1.start(); t2.start(); int key=1; switch(key) { case 1:System.out.println("aa"); break; default: break; } } }
相关文章推荐
- Java 线程同步 卖票问题
- MyEclipse下连接SVN资源库URL连接及验证错误解决办法
- JAVA 回调机制(callback)
- Java 改进简单加法器实现(代码精简)
- JAVA的学习过程
- Java 朴素版计算器实现(代码冗长)
- SpringDataJPA的几个使用记录
- java实现的加密解密
- 【Java并发编程六】线程池
- RxJava之Schedulers详解
- Java 简单加法器的实现
- java生成指定范围的随机数
- Java 类 内部类的使用
- Eclipse之Git修改文件标记
- spring ioc
- Spring常用注解@Component、@Controller、@ Service、@ Repository......
- 毕设笔记--MyEclipse10 SSH Hibernate反向生成实体类和hbm.xml配置文件
- Java 类 java的函数重载与修改对象的属性
- MyEclipse中配置SVN插件
- SpringAOP 基础具体解释