java多线程——生产者消费者问题
2015-11-21 00:00
489 查看
摘要: java多线程——生产者消费者问题
Ticket:
TicketCustomer:
TicketProducer:
package com.fsun.research.thread.producercustomer; import java.util.Stack; public class MainTest { public static void main(String[] args) { //多线程生产者消费者模式 :生产票和买票 Stack<Ticket> stack=new Stack<Ticket>(); Thread thread1=new Thread(new TicketProducer(stack, "生产票")); Thread thread2=new Thread(new TicketCustomer(stack, "消费票")); thread1.start(); thread2.start(); } }
Ticket:
package com.fsun.research.thread.producercustomer; import java.util.Date; public class Ticket { private int cost; //价格 private Date date; //生产时间 public Ticket(int cost, Date date) { super(); this.cost = cost; this.date = date; } public int getCost() { return cost; } public void setCost(int cost) { this.cost = cost; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
TicketCustomer:
package com.fsun.research.thread.producercustomer; import java.util.Stack; //消费票 public class TicketCustomer implements Runnable{ private Stack<Ticket> ticketPool; private String displayName; public TicketCustomer(Stack<Ticket> ticketPool,String displayName){ this.ticketPool=ticketPool; this.displayName=displayName; } @Override public void run() { Ticket ticket=null; while(true){ synchronized (ticketPool) { if(ticketPool.isEmpty()){ ticketPool.notify(); //票池里没票 try { ticketPool.wait(); //释放锁 } catch (InterruptedException e) { } }else{ ticket=ticketPool.pop(); System.out.println(displayName+"线程从票池中取出票"); } } } } }
TicketProducer:
package com.fsun.research.thread.producercustomer; import java.util.Date; import java.util.Stack; //生产票 public class TicketProducer implements Runnable{ private String displayName; private Stack<Ticket> ticketPool; public TicketProducer(Stack<Ticket> ticketPool,String displayName){ this.ticketPool=ticketPool; this.displayName=displayName; } @Override public void run() { while(true){ synchronized (ticketPool) { if(ticketPool.isEmpty()){ Ticket ticket=new Ticket(20, new Date()); ticketPool.push(ticket); System.out.println(displayName+"线程往票池中插入一张票"); ticketPool.notify(); }else{ try { ticketPool.wait(); } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName()+"线程等待时被中断"); } } } } } }
相关文章推荐
- java多线程编程制作电子时钟
- java多线程入门知识及示例程序
- 使用java实现http多线程断点下载文件(一)
- 使用java实现http多线程断点下载文件(二)
- java多线程核心概念
- Java线程:大总结
- Java多线程初学者指南(1):线程简介
- Java.多线程(学习笔记)
- Java程序员面试中的多线程问题
- 多个生产者与多个消费者的问题
- Java多线程1——概述
- Java多线程2——synchronized和Lock
- Java多线程3——如何停止线程
- java 生产者消费者问题以及线程池的使用
- java多线程
- java sleep wait join与interrupt的关系
- java多线程学习——CyclicBarrier
- java 多线程
- java 多线程的互斥代码
- JAVA多线程总结