美文网首页
简单票务系统

简单票务系统

作者: TimmyR | 来源:发表于2017-03-16 16:43 被阅读49次

    简单票务系统JAVA&OC对比实现

    最近在学习JAVA,其中有一个票务系统,和OC中实现的原理有些不同,趁兴也用OC写一个,对比一下,也帮助学习同异步使用。

    下面是JAVA实现:
    其中需要两个类Reservoir(票) Booth(售票厅)

    //票
    public class Reservoir {
        private int total;
    
    public Reservoir(int t) {
        this.total = t;
    }
    public synchronized boolean sellTicket() {
        if(this.total > 0) {
            this.total --;
            return true;//成功售出一
        }else {
            return false;//没有票了
        }
      }
    }
    
    //售票厅
    public class Booth extends Thread {
    private static int threadID = 0;//属于类
    private Reservoir release;//售票
    private int count = 0;//属于线程
    
    public Booth(Reservoir re) {
        super("ID:"+ (++threadID));
        this.release = re;//所有售票厅共用一个票
        this.start();
    }
    public String toString() {
        return super.getName();
    }
    public void run() {
        while(true) {
            if(this.release.sellTicket()) {
                this.count = this.count + 1;
                System.out.println(this.getName() + ": sell 1");
                try {
                    sleep((int)Math.random() * 100);
                }
                catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }else {
                break;
            }
        }
        System.out.println(this.getName() + "I sold:" + count);
    }
    }
    
    使用:
       Reservoir re = new Reservoir(100);
        Booth b1 = new Booth(re);
        Booth b2 = new Booth(re);
        Booth b3 = new Booth(re);
        
        输出:
        ID:2: sell 1
        ID:3: sell 1
        ID:1: sell 1
        ID:3: sell 1
        ID:2: sell 1
        ....
        ID:1: sell 1
        ID:2I sold:37
        ID:1I sold:31
        ID:3I sold:32
    

    OC对比

    ticket类  Booth类
    #import <Foundation/Foundation.h>
    @interface Ticket : NSObject
    - (BOOL)sellTicket;
    - (BOOL)ticketCount;
    @end
        
    #import "Ticket.h"
    
    @interface Ticket ()
        
    @end
    
    @implementation Ticket
    
    static NSInteger count = 100;
    
    - (BOOL)sellTicket {
    
    @synchronized (self) {
         if (count == 0) {
             return NO;
            }else {
             count --;
             return YES;
            }
        }
    }
    
    - (BOOL)ticketCount {
    
        if (count == 0) {
            return NO;
        }else {
            return YES;
        }
    }
    
    @end
    
    #import <Foundation/Foundation.h>
    
    @interface Booth : NSObject
    
    - (instancetype)initWithticket:(id)ticket;
    
    
    - (BOOL)sellTicket;
    
    @end
    
    #import "Booth.h"
    #import "Ticket.h"
    
    @interface Booth ()
    @property(nonatomic,strong)Ticket *ticket;
    @property(nonatomic,assign)NSInteger count;
    @property(nonatomic,assign)NSInteger boothID;
    @end
    
    @implementation Booth
    
    static NSInteger boothID = 0;
    
    - (instancetype)initWithticket:(Ticket *)ticket {
    
        self = [super init];
        if (self) {
            boothID = boothID + 1;
            _boothID = boothID;
            self.ticket = ticket;
            _count = 0;
       }
       return self;
    }
    
    - (BOOL)sellTicket {
    
    while (YES) {
        if ([self.ticket sellTicket]) {
            NSLog(@"ID:%ld 售出一张",_boothID);
            _count ++;
            return YES;
        }else {
            NSLog(@"ID:%ld 共售出%ld",_boothID,_count);
            return NO;
            break;
        }
    }
    }
    @end
    
    
    使用:controller中
        Ticket *ticket = [[Ticket alloc] init];
    Booth *booth1 = [[Booth alloc] initWithticket:ticket];
    Booth *booth2 = [[Booth alloc] initWithticket:ticket];
    Booth *booth3 = [[Booth alloc] initWithticket:ticket];
    
    dispatch_queue_t queue = dispatch_queue_create("com.sellticket.www", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
    
        while (YES) {
            if ([booth1 sellTicket]) {
            }else {
                break;
            }
        }
    });
    dispatch_async(queue, ^{
        
        while (YES) {
            if ([booth2 sellTicket]) {
            }else {
                break;
            }
        }
    });
    dispatch_async(queue, ^{
        
        while (YES) {
            if ([booth3 sellTicket]) {
            }else {
                break;
            }
        }
    });
    

    感觉差了一些 具体哪里差了又说不上来 啧啧啧

    相关文章

      网友评论

          本文标题:简单票务系统

          本文链接:https://www.haomeiwen.com/subject/qkejnttx.html