火车票售票系统的放票功能 多线程实现服务器与多个客户端通信 高级java课题测试,课设,作业

本文介绍了使用Java实现的火车票售票系统,包括服务器端的AcceptSocketThread线程接收客户端连接,Buy线程处理购票请求并存储成功购票者,定时器线程每30分钟放票,以及通知线程提醒购票成功的功能。客户端则与服务器建立连接,接收票号并发送购票请求。
摘要由CSDN通过智能技术生成

在这里插入图片描述

package com.hanlei.test02.test;

import com.hanlei.test02.utils.Product;

import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;

public class TestSever {
   
    // 实例化一个产品对象,生产者和消费者共享该实例
    Product product;
    // 定时放票
    Timer t;
    // 总票数
    int sum;

    public TestSever() {
   
        sum =0;
        // 实例化一个产品对象,生产者和消费者共享该实例
        product = new Product();

        // 创建接收客户端Socket的线程实例,并启动
        new Buy().start();

        // 买到票通知
        new SendClient().start();

        // 创建给客户端发送信息的线程实例,定时放票 并启动
        t= new Timer();
        t.schedule(new SendMsgToClient(), 0,3000);
        System.out.println("服务器已启动...");
    }


    class Buy extends Thread{
   
        public void run() {
   
            // 获取Socket对象的输入流
            for(int i=0; i<5;i++){
   
               new Consumer(""+i);
            }
        }
    }

    // 消费
    class Consumer implements Runnable{
   
        String name;
        public Consumer(String name){
   
            this.name = name;
            new Thread(this,name).start();
        }
        public void run(){
   
            product.get();
        }
    }

    // 给所有客户发送信息的线程 放票
    class SendMsgToClient extends TimerTask {
   
        public void run() {
   
            try {
   
                // 如果票卖完了或有重新放票不空
                if (sum<=100) {
   
                    product.put(2);
                    System.out.println("已放票10张");
                    sum +=10;
                }else{
   
                    System.out.println("100张票已放完");
                }
            } catch (Exception e) {
   
                e.printStackTrace();
            }

        }

    }

    // 通知
    class SendClient extends Thread {
   
        LinkedList<String> name= product.getNames();
        public void run() {
   
            while (true){
   
                if (!name.isEmpty()){
   
                    String aa =name.removeLast();
                    System.out.println("通知 "+aa +" 已经买到票");
                }else{
   
                    try {
   
                        sleep(100);
                    } catch 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值