|
demo项目名称:《项目java多线程售票实例源码》9 r& ], Q( L/ W
java源代码:
5 W, C6 Z' E7 f- `package com.javazx.test.thread;
v& {( n- \) E) ?+ N8 p8 s! r9 C% Z. r$ q; s
/**, C9 e) `; ^3 s. Z# |: X! e
* 车站类2 U5 U% e9 Q5 g2 p# |
*/
: q/ Y' o% A+ O; q0 Ppublic class Station extends Thread {* y( h5 l. O; G7 ^: j2 \0 a
8 ]6 b# B- a# ^+ @
//构造方法 线程起名
( G$ q+ R3 f# N- e: q* V9 {6 o public Station(String name) {
; [: b0 S" [5 N/ ? h2 @ super(name);
3 c8 T9 L% o. h& f6 R }
9 q& K8 t; N* e t3 C9 ~" ~, g
, s; m1 J8 M M7 i: u static int tick = 20;//票总数
7 t8 r, ~* {& ^/ p static int step = 0;//当前是第几张票
! m% F- y5 W1 y5 a static Object ob = "aa";//锁对象 随意起名6 S2 Y7 y& Z2 i6 ~+ g4 N6 I
# O3 ~5 l" u; }& y/ E //重写run方法) D2 W. N3 N5 |( T7 ^
@Override- L ?- b% G/ m0 m
public void run() {% w! E) F4 C; L/ l" _6 @
while (tick > 0) {7 q. j; w" N; L) D% t
synchronized (ob) {
: ]1 p$ A9 m. w* U6 g, ] if (tick > 0) {. z2 M! y, X3 U4 ]% L5 z
step++;4 {% P; ]& o/ X9 T1 S; U
System.out.println(getName() + "卖出了第" + step + "张票");* c+ Y# Q# ]5 e2 P+ {: Z& w( R Q
tick--;5 V+ h; l+ o: @0 F: \
} else {9 D5 y1 u$ c1 Z! Q" r- T) `. [% g
System.out.println("无票了");
+ I5 [2 I O p6 }, z }1 u1 j8 O7 L; {, Z
}5 c' K) ]4 t6 x/ e8 _
//每卖一张 睡1000毫秒
: X. [8 K! D0 Y, z, G* O try {' z! T1 x! ~% j4 |3 R% N' `! s
sleep(1000);
" ~# M, m9 w) S7 k7 ^! ^ |" t1 \ } catch (InterruptedException e) {6 \& f. v: T3 r9 E
e.printStackTrace();! A. B& d- ?/ f$ _; c6 J8 p
}' d$ u7 t. j6 w$ e! i
}
( p9 R! V# L/ G g( K }4 }7 M) d% \' p4 r. Y# q' Y5 ^2 ^5 f) Z
$ e' c; J e$ d5 z- g) ?' a}
% t8 U9 t# I K$ @; B& {0 l8 r' t, p Q. P* o
2 g# X5 P0 E8 _' w1 qpackage com.javazx.test.thread;) @$ z( o1 ^/ ~, D
2 H6 f/ k; P4 o7 e" W/**
* c# c; t" t$ z" {9 q7 j * 窗口类) D; \! s2 W+ v0 U( L
*/3 p( y9 C0 g0 r; d' W! ^
public class Windows {
; C( I8 v0 h$ L public static void main(String[] args) {
- G$ U4 C# O. C! T3 x //初始化三个卖票窗口7 T. S8 P( b% N% x
Station s1 = new Station("窗口1");
4 R' ^1 F( G: ~" E! {0 w Station s2 = new Station("窗口2");
! h7 Y3 k0 U0 k- l Station s3 = new Station("窗口3");, S! |' P3 n* g, }8 \
: ?$ {7 H4 Y" ^* y
//三个窗口开始卖票) m j- t0 E( Y a# P& U' Z
s1.start();0 \2 S2 E. X' F) ~$ V
s2.start();3 l: a- I9 G6 k% J0 {
s3.start();3 S' Z* J6 l. o- {
8 ?% Z2 h( B; s
}
+ O2 `. Z, s4 S; \$ Z}5 q( q8 f8 g$ b! I- o& _7 y
7 X. b0 v$ h: [' M. M) x t/ z, X) J& r4 }2 Y/ R o1 f$ W
运行结果:7 d0 I( \( H! W
" H* B5 R: x. Q/ k k+ a9 c) X# v0 e
窗口1卖出了第1张票6 y; i1 q5 e7 ?6 x2 u% x- b. C
窗口3卖出了第2张票
3 V) d! Z) F* l2 b$ ~$ ? v8 l; v窗口2卖出了第3张票* c! W! n' [' R. q5 R3 |% X
窗口1卖出了第4张票
8 f4 z. H$ L. ~; @' H5 ]; v窗口2卖出了第5张票# u. C$ h, k4 R$ u( ]& Y2 ~5 t* l
窗口3卖出了第6张票
( S% [6 \7 G) p! B, W窗口1卖出了第7张票
. f+ E9 m' ^! q" w窗口2卖出了第8张票
2 @8 w0 c9 u2 C+ s4 b3 M9 i窗口3卖出了第9张票1 {4 F3 a6 P Y* D* {* g1 u O
窗口3卖出了第10张票- @% T. {% S# h t) A
窗口2卖出了第11张票* x; z+ x6 J; m
窗口1卖出了第12张票
, A" ^+ F; U! |1 [' q1 l" j( T窗口3卖出了第13张票
0 B7 u5 c2 A6 {6 j窗口2卖出了第14张票
- ~/ H% U. C4 \0 |0 F窗口1卖出了第15张票, A+ y* Y2 |% @( H
窗口3卖出了第16张票
7 x- t4 t: C! U窗口2卖出了第17张票3 ^5 @8 ^# G) v# T. ]' g; |
窗口1卖出了第18张票
8 o3 y2 \" t9 y/ }- x, M窗口3卖出了第19张票
" L6 f* L) \) w5 f6 v% V* |窗口1卖出了第20张票+ J* z: n5 ?# Y( {$ Y. Y
无票了! E1 X2 Q' i# q) T) r# K
+ k4 w* P! Z. F8 w! Q# R/ u& @5 `4 m8 Q7 K& a; K I8 k
0 ]8 k' ]! K0 X3 o9 c* _! L& T% h) ^
% d1 {6 S( @8 p' B. e# D8 p |
|