java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2865|回复: 0

java多线程售票实例源码

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66101

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

    发表于 2017-11-1 17:47:27 | 显示全部楼层 |阅读模式
    demo项目名称:《项目java多线程售票实例源码》8 h9 w# T5 `6 g
    java源代码:
    * e1 g. X5 V# d# _9 c  xpackage com.javazx.test.thread;
    ( z2 a  X9 ^; g3 A1 a0 w

    3 w" D$ K4 c0 _/ ]" u! R8 c! w
    /**
    4 Z" G7 H# o; F, t! f
    * 车站类: L) g; |& O9 o) N' q
    */0 R- w, W% E5 w& J
    public class Station extends Thread {/ k2 j& ]5 r5 u
    % h; [  X3 t$ J* i# k
        //构造方法 线程起名; }- C3 ?$ e- P3 i( T+ h
        public Station(String name) {
    : N; [6 J3 j/ ~+ z* d* ^3 X        super(name);
    ) Y" u" a. I# l& X. K( ^
        }
    ) h( }2 g  L+ Q( q
    - ]/ @& \2 c3 f. S: K% K% r. U    static int tick = 20;//票总数
    + ?3 k1 g9 R- C0 y; ?! n: K  R
        static int step = 0;//当前是第几张票! s2 f1 U7 w6 |. a  b
        static Object ob = "aa";//锁对象 随意起名
    + M9 g6 [0 K" \3 P# y% v$ v% X
    - P! S: U/ Q) B8 s
        //重写run方法
    . E  F  W# @6 D3 w. E' f7 l2 o2 {
        @Override
    6 g3 L- N: `* k* S; o  K
        public void run() {- r6 M+ |4 W7 _$ x; @4 H
            while (tick > 0) {! W) b( T( X/ g
                synchronized (ob) {+ u4 C% r) B/ @0 d: r1 N; S- k. ?
                    if (tick > 0) {
    ! @6 D) v' q9 ~8 B; g                    step++;6 ]  R# e' e1 }1 M
                        System.out.println(getName() + "卖出了第" + step + "张票");" M% o8 Q5 A- V9 @# C* a; w8 F
                        tick--;7 G4 w& h2 T& _" a
                    } else {
    ' j+ R2 I, ]% h( X- a, t3 L, r# W                    System.out.println("无票了");
    3 x' C! M- I% {9 A! \
                    }  F/ b" v. T; Q% }+ V6 ^; Y
                }' J% _* e% n. N: ]- I% P
                //每卖一张 睡1000毫秒
      H* N5 a, {+ F6 y" |8 n, R+ O
                try {
    2 a# z0 ]- Z! r( E                sleep(1000);
    + @7 h3 ~+ O' ]: i
                } catch (InterruptedException e) {. N9 @2 C" n! q. r! E+ E. r
                    e.printStackTrace();
    ! x# C% m+ t; V2 ?) E* {+ c. i
                }
    " j, a6 e* `* [& E9 }        }
    - _( N9 {4 o1 a' ^/ ?6 [6 j    }- j0 J2 E( W( J: ^. e
    % ^, E$ t0 j% ^: Q6 q: T
    }2 j1 V" K% Q9 r8 h1 U( i1 A
    $ L& e% s+ H5 f* y9 I

    + I# v+ i& M$ g& \8 W* Wpackage com.javazx.test.thread;, h% M' |6 g) l" ]7 G/ ^

    , J$ A4 L3 f+ [% V) S8 `3 \
    /**/ {, T; a) k5 G' e
    * 窗口类& I6 d8 f; z1 k
    */- |5 ^' b4 d& [" n' T& x( g. b
    public class Windows {5 |8 P' n0 c% O0 V
        public static void main(String[] args) {. s1 X% i! l! e% k$ \# L
            //初始化三个卖票窗口% M! x6 V. q5 c  P, S8 O
            Station s1 = new Station("窗口1");
    / G! y& g( q( t  q
            Station s2 = new Station("窗口2");1 V- b! @3 ~2 `: R7 J
            Station s3 = new Station("窗口3");
    ; ]: B0 c$ g! I

    , |. }  P& n% z/ Q2 H3 w
            //三个窗口开始卖票
    8 J7 ]( L% }/ ^: U+ y
            s1.start();( E9 J8 V/ m) N/ m4 c. E$ `
            s2.start();, l4 }0 |9 Q8 r7 D( G. Z" k
            s3.start();
    8 O8 V1 i1 X% R! A; [. O) w

    : c% j! I" v* I/ `/ Z3 v
        }
    1 f) p! R8 W- Z& {: p}3 w0 T8 s: }) c5 w9 C
    + h! ^$ G; _% l+ |0 S, R' K
    6 [$ ]: O8 z0 i
    运行结果:
    1 B6 @0 ~9 c. f3 E- q& l, x/ O8 _9 \
    窗口1卖出了第1张票
    5 Z9 H2 x# L% n窗口3卖出了第2张票% X$ Q9 n3 l7 G, U! M
    窗口2卖出了第3张票
    # x4 Q% z0 Z; b. V3 ~! S. ^: {窗口1卖出了第4张票% k, ~+ i! {# {, D2 j: ?4 a
    窗口2卖出了第5张票
    ! w$ @, n4 W- W窗口3卖出了第6张票( H: M6 X- K, e. q
    窗口1卖出了第7张票
    ' }8 N2 t8 ]2 ]" `. L& [) t窗口2卖出了第8张票- O9 x& A% N( |
    窗口3卖出了第9张票. |* t, @7 Z: X* y+ |* Z
    窗口3卖出了第10张票
    & d9 O, }2 }, _( A) Q1 ~9 a* ~6 m窗口2卖出了第11张票5 J4 G/ R5 w' Y* A4 N2 P7 d
    窗口1卖出了第12张票
    9 T+ z! w( B) h) x7 i4 u; z窗口3卖出了第13张票2 W9 u" b" l" r; b* f4 }
    窗口2卖出了第14张票( w+ ]5 |. T$ z" `5 t9 }
    窗口1卖出了第15张票
    6 d5 z/ {) X+ t6 h( g窗口3卖出了第16张票+ ?* s$ I5 t6 `: a: j5 B  _
    窗口2卖出了第17张票4 P! C: ^: C" W- }* ?' m3 Z, T
    窗口1卖出了第18张票
    8 ?0 W8 R/ q0 D4 H$ s窗口3卖出了第19张票
    / k8 k$ J+ T8 K" c+ t窗口1卖出了第20张票
    % T7 d& A' m$ K) f# r9 r无票了7 L( `- O* M( {- e
    1 r* \. _. B2 G9 k% z+ d% \
    / \! y# w9 {+ P" U( B
    ! Z  c- Q2 ?% _) S' a6 F
    6 q" I9 P( r4 E$ z* b7 c1 h
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-4 13:25 , Processed in 0.104131 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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