|
demo项目名称:《项目java多线程售票实例源码》" O3 Z3 F; w- x4 R. Q3 s7 I
java源代码:
/ p% @* p6 P( \ c. _package com.javazx.test.thread;
# r0 p4 {+ Q, O% g- I6 [& P; D
2 C) P; Z: p3 r# B b/**
. \( g/ [# G7 A * 车站类
7 t# P/ g% C( l: L- a6 _ */
' Q( ~8 D/ y# F0 i' h5 w- w+ ]public class Station extends Thread {
; g) E, F- Z& Z, G, W% [6 ]$ f, T2 w; i* ?7 u C- z# N
//构造方法 线程起名: C8 W7 t* p6 ^7 w8 u9 I+ h3 j
public Station(String name) {
! i; ?" G* r) E8 U# _ super(name);
6 k6 r4 ]+ \; H" {1 f }! w! ~2 @: Y5 b5 J" z9 J
( ~! s9 t- V! K. K
static int tick = 20;//票总数5 ?4 I5 [* S' d7 w: f& q
static int step = 0;//当前是第几张票
' p% v" N. r! E' n8 n8 J' h static Object ob = "aa";//锁对象 随意起名
- l9 Q# [8 B) m% ?4 e s+ l' E
0 u0 K9 i3 U$ h, O% Y, R //重写run方法5 S# k+ w) I9 F, [/ @4 z6 k
@Override
" t; k+ r+ }6 I; U public void run() {
2 U5 X1 \7 t$ Z while (tick > 0) {
3 m9 r* Y0 ^8 v synchronized (ob) {
* M& X3 u& k; r1 m3 f& m( { if (tick > 0) {
; A. H! D0 _# D2 e" D step++;6 ^/ Z: k% g9 R# L) U& R. E9 N% b
System.out.println(getName() + "卖出了第" + step + "张票");
7 d$ A9 q# a' S' P tick--;
, D; |* ^, \/ g" H3 I) c- z3 U" N } else {) N8 F2 K( }8 W \& V% l9 a! I
System.out.println("无票了");
$ \% V2 X1 t0 | }
6 S- b" U& H4 S }
+ b" g3 F$ Z3 O) N, A( Y* M //每卖一张 睡1000毫秒
) l$ ?2 z3 P- x1 R6 B, L try {# m2 V0 v8 K' H9 U2 g& k
sleep(1000);* i8 n# d3 \6 R! ` R
} catch (InterruptedException e) {
$ {" |. S- {( e7 U6 e' C e.printStackTrace();
/ M& X2 R) X" ^3 n }
- b6 [: ^- N* X! J* j. t% v# ^ }
5 l6 k& g+ a( Q6 l& i3 l }
6 M+ x+ }+ H3 B/ V# n* Z7 r8 J5 u
}4 s' D! T" ?/ B6 ], A$ ^9 h4 E1 F
; t4 R" ?' o( l" ~! o9 j
3 K: R' p6 C+ o3 a% m6 Q, mpackage com.javazx.test.thread;
\% m: W) I o) S0 N5 Z
! b$ j$ D' I; f* `' q/ a# @/**
% M& z$ b) s# { * 窗口类
/ x2 u- m' v8 ]4 k. W */
8 E# S( J% C( |, H* X1 ^. Dpublic class Windows {
( h3 w$ ^# C: t4 V: B public static void main(String[] args) {
% T8 V$ g3 R) T2 Z" F //初始化三个卖票窗口
3 i* A- X' n2 y- a Station s1 = new Station("窗口1");. U) g' d6 O) O. `" L7 D
Station s2 = new Station("窗口2");0 L' S& n4 \. y8 {+ n
Station s3 = new Station("窗口3");6 Z& ]) W0 g6 P- T
3 f. j! @' F# E //三个窗口开始卖票. K1 R9 u L/ F, ^& L! ^
s1.start();
( c7 s% C0 C/ a: Z, [! y s2.start(); W% V2 k& I6 j# f* f/ s& U: n( }2 g
s3.start();7 s5 f$ M/ z! f: x; Q6 R, G7 M
0 W0 m3 C$ ]1 n }
) {: J. I/ P% s4 o$ _}
" N7 \) f9 q2 T- U; Y- v
* `1 G1 x. l& d$ K$ |2 O
, V& k9 ]! S4 g0 H5 ^+ o运行结果:* f4 P/ {1 { y& q- ~" X1 j
% r- d1 b! r6 a窗口1卖出了第1张票
0 C3 I$ M9 j8 R5 \4 j9 z窗口3卖出了第2张票+ _/ b& a0 B9 w5 G) n
窗口2卖出了第3张票
1 ~. X( n8 D @0 o$ f窗口1卖出了第4张票# o( m) N3 h0 o% y5 ?
窗口2卖出了第5张票2 p: ^' }% n* l' O, S
窗口3卖出了第6张票
: x4 K- {! P$ Z1 C窗口1卖出了第7张票& `; m- o, x1 W9 i
窗口2卖出了第8张票
7 F6 h* r" f* N3 H9 W窗口3卖出了第9张票, F# ^2 h* n: g, b2 f
窗口3卖出了第10张票
2 ?. z$ X0 n5 s) ^6 s窗口2卖出了第11张票
$ `% d' h8 {* D6 ^窗口1卖出了第12张票; x+ G+ m; A8 V5 x
窗口3卖出了第13张票/ c- N: _) W' C5 r
窗口2卖出了第14张票6 q% P2 ^3 u8 y8 Z% m3 `2 F
窗口1卖出了第15张票
$ G( s8 h; r. w$ e) y% }窗口3卖出了第16张票: W" Q) j7 f) t, @# u( \
窗口2卖出了第17张票
1 Y. a* \( l1 T0 y7 J L/ S窗口1卖出了第18张票 o& V' r6 k" N8 e; z3 ^
窗口3卖出了第19张票& m1 {4 \ T! v- Z
窗口1卖出了第20张票 A9 p6 c* T: D$ j* V
无票了 [# U$ i& ]; o i% {! m
. Z3 {! B6 r4 T( |
2 r% R( R; I' l( H( i5 i' G& m0 R! a8 j1 T# Q: |, s
; {% ~' Q/ E5 e! Y' J4 Z8 N* I$ y" R' v1 _
|
|