java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3040|回复: 0

java多线程售票实例源码

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66375

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-11-1 17:47:27 | 显示全部楼层 |阅读模式
    demo项目名称:《项目java多线程售票实例源码》
    1 [& u5 m0 O/ D, Fjava源代码:
    9 i" t& _/ Q- E% g) `0 \, }' vpackage com.javazx.test.thread;3 l2 Y5 v# k7 P( N/ o. p/ W5 V
    2 `: i: u( c/ O
    /**
    $ J  k; W3 K! m$ S
    * 车站类
    ( h7 T' @" C# B- B* `" k
    */
    3 h: H4 w& ]- ~$ @  w
    public class Station extends Thread {
    , M& i7 }3 {5 w  }3 Z. \, h3 m$ S! m! v" Y" {; B6 ~* H6 S
        //构造方法 线程起名
    ( B7 n$ f: p( Y1 h
        public Station(String name) {
    7 U' [$ A1 V# F- K$ Y# O8 \        super(name);
    / i# ]  q6 A$ H) \
        }" j+ L/ G2 K( N
    ! l) f+ i5 g4 J0 @' x$ a; O4 B
        static int tick = 20;//票总数
    5 X/ Y1 i* F6 ~3 c- j
        static int step = 0;//当前是第几张票& n; m0 B* G. X/ p3 k
        static Object ob = "aa";//锁对象 随意起名# M3 C- T7 R; r, i1 ~6 g" r

    2 V% w5 F% |+ Y. z
        //重写run方法
    - e/ P( m- W/ O$ H2 h9 O: p4 W! U
        @Override
    ! l( q$ G9 d0 F6 A. L/ Q' z
        public void run() {; x$ s3 n/ X' s4 b
            while (tick > 0) {
    9 K3 a3 l9 z' i$ {% X' B6 E2 n$ D8 l' h            synchronized (ob) {/ r" U+ w: {8 e# O% }
                    if (tick > 0) {
    9 ?# ~% P: F8 W2 e                    step++;/ W  \9 {9 n2 E$ C
                        System.out.println(getName() + "卖出了第" + step + "张票");
    + k: B- {  j/ S5 h. s9 Z7 r
                        tick--;& }( J  G( c/ {; f2 W' L" }/ h* h" D
                    } else {
    - a' J7 F, ]) w; N$ T                    System.out.println("无票了");
    ' f1 J! }4 B+ n
                    }" W6 m: |  q8 g; \) S. P' f
                }
    " t3 b1 z/ ?1 Z            //每卖一张 睡1000毫秒& V+ e- \; L# O4 ]) p* p+ r0 p, l
                try {9 C3 C2 `# |, Y
                    sleep(1000);9 \$ \% S: b, g0 p
                } catch (InterruptedException e) {
    7 i3 t& l1 Y/ K4 g' y& n4 s                e.printStackTrace();: ~8 o+ K* J6 _2 H4 [3 E4 s! D. H1 `6 A
                }' d  O. M, l* |/ b- J! x: y8 S
            }; w; P) E5 u/ ]  ?
        }' D! ]8 E( p! ]9 t+ K- Z2 y

    - E4 T7 d0 W& |. o4 b}" G$ _' m! x) a7 b: R$ E  N8 M2 m# L8 ?

    + u% t) U$ ?: C. v+ v% G" o
    # _5 r! C& k, b' L! Ypackage com.javazx.test.thread;
    # y  U) e. k5 d0 v' w7 n' m$ T

    5 I/ [8 ]& ~6 [4 S2 Q2 W2 X/ ^
    /**3 x" d3 ?0 d0 y  N
    * 窗口类! e* V" Y0 n) J' L8 W2 z* I& \$ i* x
    */
    - i# v% ?7 E4 _" n% d# I+ J
    public class Windows {, z" b$ u0 V9 E0 D
        public static void main(String[] args) {6 k  t: [" V6 Z% O1 |+ H$ ^
            //初始化三个卖票窗口
    9 c3 B- S: ]& A
            Station s1 = new Station("窗口1");
    $ K' h' B# j5 b  {1 z
            Station s2 = new Station("窗口2");
    6 ~) U5 k9 U2 |9 F% B/ Y
            Station s3 = new Station("窗口3");
    ! F! ~% F* u' b1 y6 w

    * k6 F9 `( ^, q3 D+ r
            //三个窗口开始卖票
    $ F* ]& b: A% ?8 T9 o: v
            s1.start();# y+ L- F. i& ?  E, U/ `! b
            s2.start();
    7 b! }& g) m5 c  J6 [
            s3.start();& O3 U* Y' n3 A) [

    5 e% Y; A7 x8 _4 Z  r
        }
    ; `% A- {' R3 w2 ?}
    / `6 n  B& R# L: Q
    / g, _9 I; O1 |/ f" G  y+ f
    & B5 p2 V; h) {& C$ x1 O运行结果:
    / p. E( j2 J/ U* a2 ]2 P6 z) b, j
    ; K0 m$ z' P1 w+ _& \窗口1卖出了第1张票
    1 f  J! ^% l# o& G9 \窗口3卖出了第2张票6 [% f7 v. F4 v3 A" D: T# P
    窗口2卖出了第3张票
    $ v1 {) s5 V6 i+ ?9 ]窗口1卖出了第4张票
    9 U( d5 T8 `% L" P7 {& S5 {窗口2卖出了第5张票* y8 u. z$ k% b2 C( o
    窗口3卖出了第6张票& l& l* M* T. Z+ U, w2 \  P
    窗口1卖出了第7张票9 `, {" z, ~$ `3 q
    窗口2卖出了第8张票! q1 A, Z" t4 ^: `$ K
    窗口3卖出了第9张票! ^- i) A$ L, k" T
    窗口3卖出了第10张票
    ( R1 `5 T, D1 m窗口2卖出了第11张票- l8 w+ `" c4 j& }. X/ y
    窗口1卖出了第12张票8 E2 l. T' _* D9 y
    窗口3卖出了第13张票
    2 z. k, E# k* r5 o2 r* ^窗口2卖出了第14张票5 E) ]! M: i/ u
    窗口1卖出了第15张票# D  H! ?9 l# X1 \: V/ B1 v
    窗口3卖出了第16张票3 |/ u9 ~* {/ q
    窗口2卖出了第17张票
    * s! a+ q- C" K1 j窗口1卖出了第18张票6 Z3 y1 v* V1 I/ h1 X. K" ?
    窗口3卖出了第19张票& S7 j' T! _6 a5 }) e
    窗口1卖出了第20张票
    2 s! a& z- w% [: E1 u无票了
    ' d; m8 T' m$ f  w- f) N% A) J. Q8 d, ?! R* N2 E1 Y

    ; ~5 ]# B4 ^. O. ?
    5 ~. Y' g; f! Z, T/ i
    & l7 |* y! A2 q$ P
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-12-22 15:27 , Processed in 0.208477 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表