JAVA synchronized 线程经典 生产者消费者 两个完全不同的实现的方式
2012-08-23 16:36
627 查看
package sell_ticket; public class ThreadTicket { public static void main(String[] args) { MyThread m = new MyThread(); Thread t1 = new Thread(m); Thread t2 = new Thread(m); Thread t3 = new Thread(m); t1.start(); t2.start(); t3.start(); } } class MyThread implements Runnable{ private int ticket=100; //synchronized public void run(){ while(true){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //用synchronized包起来,形成同步代码块,但后来发现用不用其实一样 synchronized(this){ if(ticket>0){ System.out.println(Thread.currentThread().getName()+"出售了"+ticket); ticket--; } } } } } 以上还有另一个写法,synchronized一个方法:class Test implements Runnable { //票的总数 private int ticket=20; public void run() { //50只是用来循环,无意义 for(int i=1;i<50;i++) { try { //休眠1s秒中,为了使效果更明显,否则可能出不了效果 Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } this.sale(); } } public synchronized void sale() { if(ticket>0) { //很有意思的一个发现,如果用System.out.println(Thread.currentThread().getName()+"号窗口卖出"+this.ticket--+"号票"); 哪怕不用synchronized,重复卖票的现像也会低很多 System.out.println(Thread.currentThread().getName()+"号窗口卖出"+this.ticket+"号票"); ticket--; } } public static void main(String args[]) { Test mt=new Test(); //基于火车票创建三个窗口 new Thread(mt,"a").start(); new Thread(mt,"b").start(); new Thread(mt,"c").start(); } }
第二种,采用堆栈的方式:
[code]
[/code]
相关文章推荐
- JAVA synchronized 线程经典 生产者消费者 两个完全不同的实现的方式
- 线程经典&nbsp;生产者消费者&nbsp;两个完全不…
- java线程间通信[实现不同线程之间的消息传递(通信),生产者和消费者模型]
- java线程协作,经典生产者/消费者模式(一、synchronized互斥)
- java线程:三种方式实现生产者消费者问题_2
- java线程:三种方式实现生产者消费者问题_1
- java 分别利用synchronized和jdk1.5新特性实现多消费者-多生产者线程的等待唤醒机制
- (十六)java并发编程--线程的死锁解决方案(生产者和消费者几种实现方式)
- Thinking in Java---线程通信+三种方式实现生产者消费者问题
- java: 线程间通信经典模型“生产者-消费者”模型的实现
- 生产者/消费者问题的多种Java实现方式
- java实现生产者消费者--三种方式
- 生产者/消费者问题的多种Java实现方式
- 生产者/消费者问题的多种Java实现方式
- JAVA消费者与生产者模型的几个不同实现
- 生产者/消费者问题的多种Java实现方式
- 从java多线程实现“生产者-消费者”模型来谈谈操作系统中线程状态的转换及线程同步的总结
- 生产者/消费者问题的多种Java实现方式--转
- 【Java】线程wait() notify()通信 实现生产者 消费者问题
- 生产者/消费者问题的多种Java实现方式