|
demo项目名称:《项目java多线程售票实例源码》+ j' P4 e) [; F8 Z
java源代码:
" o2 A4 p* z2 tpackage com.javazx.test.thread;
9 z% j9 K# `& n4 U" U) W7 M$ _: o- [( P9 F% Z/ c, ~) S/ f1 s8 P
/**
, j. @' r& M( b& Z% W% ` * 车站类0 `, f7 e4 s- N1 X; ~ f0 r- @9 \
*/
" E5 y6 X- x' M4 G6 o1 hpublic class Station extends Thread {
% ?* |+ E4 M6 o: X N3 `8 v% L. t1 d4 H
//构造方法 线程起名
4 g& q D: ]2 l: G& _ public Station(String name) {( z3 X2 Z, W3 C* ?
super(name);! m+ {/ t% x" B- Y
}- I1 Q) t8 A4 e. Q& r
5 g7 M% B1 y3 T static int tick = 20;//票总数
6 Y! Y* U! B) } static int step = 0;//当前是第几张票- W: {! |$ M( c( p- b1 Z
static Object ob = "aa";//锁对象 随意起名
; R9 X. U3 N4 P
6 i s& r( y6 I. f! X$ h. I) s+ W //重写run方法
5 W4 D' ~+ N5 M8 y @Override
* y; ^0 H7 j. L public void run() {/ U7 o& R1 O- ~$ @9 x- ~& m: B
while (tick > 0) {" i+ ^' }) a8 L/ P4 A* M) b
synchronized (ob) {
/ S$ o! L. x# L! O! U; T5 B if (tick > 0) {! G3 m Z; g$ N# U" L3 \, Y
step++;
& l7 U# X$ d; A) l9 {. q System.out.println(getName() + "卖出了第" + step + "张票");
" V4 M5 d' t+ L# F2 I tick--;
7 g) Y% y5 H# J( u } else {' H( d% B+ X; O. c
System.out.println("无票了");
$ Y6 E3 J b }, e }! {/ g: j9 m# Z
}
$ H% P1 @% H6 r: g* R //每卖一张 睡1000毫秒
- w' N5 {: v1 X0 g0 Y try {
+ k5 H0 {- G, B6 {6 c6 Q6 z sleep(1000);6 F P( V0 F' |3 e1 b' J
} catch (InterruptedException e) {
6 G- }( b( p2 c I, z7 h _5 f1 ^ e.printStackTrace();4 j7 c1 d+ \8 `% K9 i; m
}3 @* Y: Z- j, X) e" s7 M
}
9 b b/ `. h6 s( z9 u }
3 b. \: j7 Z0 o. h) h6 `- n% _. ]% ^$ p" s
}
, G: ^/ k& h2 M6 \8 g+ i; o* z$ J' A8 c/ I5 a2 [9 o: W
1 l' X- @: y" ^* q+ s
package com.javazx.test.thread;
2 V0 r1 u# S4 B1 O x
6 G. [9 y# A: L7 i4 W- r1 P/**, e/ X- u5 g( u# P
* 窗口类
9 }" i* t7 R1 B S# C# l! D */8 w7 N: Y/ T+ W; e& H3 ~; w
public class Windows {& w l( P+ I( j4 e! P3 Q7 r5 N
public static void main(String[] args) {8 y1 @7 U) s: ]5 o! l/ d) |
//初始化三个卖票窗口$ d/ Q; X1 n+ z s9 r6 h
Station s1 = new Station("窗口1");( V \# z4 h3 ^) o5 g
Station s2 = new Station("窗口2");- Y8 b1 e" H8 w6 r. J
Station s3 = new Station("窗口3");
/ H- h, a9 q; t) C2 q% a
' Z/ Z/ i! t2 b, j //三个窗口开始卖票
: U3 j' A# R$ T9 J s1.start();
4 w* n( f; |8 b; s4 i s2.start();: C# {! ?/ z: @" W4 |* B
s3.start();
* p: c: {' A! d; G2 L2 r
; \- }) P! S2 T9 Y }& \9 ~( ^+ o4 x& E- @
}- U' p: x1 I. J3 |! E1 \* K
6 y0 D5 r+ D- M8 S
- F/ \- a9 b5 m+ A8 Q! i6 _
运行结果: y- d- f1 v) z9 a7 \" ^
# R# c$ q+ T; s$ N5 W窗口1卖出了第1张票8 d" b2 |' k# A" U
窗口3卖出了第2张票5 ?3 R M$ K: w/ u0 F
窗口2卖出了第3张票
1 d$ j' k1 Q2 j* L! v- j! }: Q1 F R窗口1卖出了第4张票
) T" w0 K Z j: u. R窗口2卖出了第5张票2 A$ p1 u B! h8 m6 C+ p
窗口3卖出了第6张票. M9 b: S# _( Z8 H. H6 x
窗口1卖出了第7张票3 n( [$ g! f/ r" e* B+ d, ~" ?, J
窗口2卖出了第8张票- W: i% w7 k2 ~4 }+ e
窗口3卖出了第9张票+ }4 w; i" ~9 C: P2 A0 @6 }$ d; c
窗口3卖出了第10张票
! x7 V$ W- @. d/ f5 {窗口2卖出了第11张票8 b6 g5 M- E' p+ s! ]
窗口1卖出了第12张票3 B- ?& C- z8 `0 Y5 \$ d
窗口3卖出了第13张票
: @% h6 j& r* T$ }( ]% C. z窗口2卖出了第14张票2 \& ?$ s! h G2 U1 w
窗口1卖出了第15张票
Q# c O. g- t' h4 [; ^) G9 j窗口3卖出了第16张票* e. Y& Y% N% ^ o3 O& `4 Z
窗口2卖出了第17张票2 D( E1 w6 T* s p" ?1 [1 G
窗口1卖出了第18张票
1 f0 M( J0 U8 w' f1 n窗口3卖出了第19张票
$ u& U: q' p( o% t. D9 }. G7 j窗口1卖出了第20张票
7 ^8 f# g/ E. p2 l! v无票了4 z8 `: }/ L" D5 h( y+ o- t
9 `- |0 ^( A3 Z' \/ @ |
5 X9 @1 Z. @' g
} w" [; {5 ~: ]2 O# x- C/ a
0 t4 R |- i- x/ ^ |
|