黑马程序员技术交流社区

标题: 线程估计堵塞了。。谁来帮帮。。感觉不太对啊 [打印本页]

作者: poi1234bnm    时间: 2016-11-23 14:35
标题: 线程估计堵塞了。。谁来帮帮。。感觉不太对啊
package no2;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

public class SealTicket {

        /**
         * 13、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                Ticket ticket = new Ticket();
                TicketSealCenter tsc = new TicketSealCenter(ticket);
                SealWindow sw= new SealWindow(ticket);
               
                Thread t = new Thread(tsc);
                Thread t1 = new Thread(sw);
                Thread t2 = new Thread(sw );
                Thread t3 = new Thread(sw );
                Thread t4 = new Thread(sw );
               
                t1.setName("一号窗口");
                t2.setName("二号窗口");
                t3.setName("三号窗口");
                t4.setName("四号窗口");
               
                t.start();
                t1.start();
                t2.start();
                t3.start();
                t4.start();
               
        }
}
class Ticket{
        List<String > list = new ArrayList<String>();
        String name = "No.";
        int tnum  =0;
        public synchronized void   get() {
                while(list.size()<1){
                        try {
                                this.wait();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
                System.out.println(Thread.currentThread().getName()+"出售"+list.get(0));
                list.remove(0);
                this.notifyAll();
        }
        public synchronized void set() {
                while(list.size()>5){
                        try {
                                this.notifyAll();
                                this.wait();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
                System.out.println("生产第"+ ++tnum +"张票");
                list.add(name+""+tnum);
                this.notifyAll();
        }
}
class SealWindow implements Runnable{
        Ticket ticket ;
        public SealWindow(Ticket t) {
                super();
                this.ticket = t;
        }
        @Override
        public void run() {
                // TODO Auto-generated method stub
               
                ticket.get();
        }
       
}
class  TicketSealCenter implements Runnable{

        Ticket ticket ;
        public TicketSealCenter(Ticket t) {
                super();
                this.ticket = t;
        }
        @Override
        public void run() {
                // TODO Auto-generated method stub
                while(true){
                        ticket.set();
                }
        }
}

结果:
生产第1张票
一号窗口出售No.1
生产第2张票
生产第3张票
生产第4张票
生产第5张票
生产第6张票
生产第7张票
三号窗口出售No.2
生产第8张票
四号窗口出售No.3
二号窗口出售No.4
生产第9张票
生产第10张票

估摸着堵塞了。。但编程的时候自我感觉良好来着。。解决掉这题我就面试社招。。来哥们帮一下。。我币有多。。回答的好有送哦。。
作者: poi1234bnm    时间: 2016-11-23 14:50
自己顶。。

作者: poi1234bnm    时间: 2016-11-23 15:03
再顶。。。
作者: poi1234bnm    时间: 2016-11-23 15:10
顶。。。。。
作者: poi1234bnm    时间: 2016-11-23 18:13
已解决。。
        @Override
        public void run() {
                // TODO Auto-generated method stub
                while(true){
                        ticket.get();
                }
        }
作者: aA772807986    时间: 2016-11-23 22:43
同学,好样的!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2