|
demo项目名称:《项目java多线程售票实例源码》7 J0 {8 |* K; x! l4 }5 X) q
java源代码:& w. P6 q4 T, q$ E( I
package com.javazx.test.thread;9 C/ J! E$ T ?/ T0 A+ |# l2 H4 G
) J" U5 B a, p3 v0 U7 t z/**2 l/ S0 s1 d) g& Q
* 车站类
6 E4 n: [" w3 C */
& a* ~/ b$ X7 C1 n, `public class Station extends Thread {
% Y2 _) a0 Z7 }+ G' t: a9 @/ ]" Q) ?6 l
//构造方法 线程起名* R' I# ?0 F5 S! l7 B3 X
public Station(String name) {
7 \" l, i& f z1 P' K8 T6 T super(name);% | ` H: ~! E& [2 ?( \( S
}( V4 M7 F; _- k) ~* M& P# D
4 u) a- ~& g7 j% C+ L6 { M
static int tick = 20;//票总数 y( _- `: d. b( v( }, |
static int step = 0;//当前是第几张票& S0 ^3 f8 C) z/ w2 e) a
static Object ob = "aa";//锁对象 随意起名
j$ y+ z9 q% H: p S, k R& x, Y& ^9 ?
//重写run方法9 |8 d8 y# ]- c
@Override. ^' C: g6 E8 r; r% d
public void run() {7 V* z9 e2 G* g5 e/ c+ |8 ?! B* y
while (tick > 0) {
! o4 q" p' h: c1 X/ f synchronized (ob) {9 ]4 b3 _- L1 n# n
if (tick > 0) {. P& t# W: l" n0 R H2 @$ @: d
step++;1 Y' W% C5 s# K$ p M7 a6 F
System.out.println(getName() + "卖出了第" + step + "张票");
* q1 z8 ^. E" V tick--;9 Z7 v3 ?$ f8 Y
} else {; ^# e9 T, A( v- M
System.out.println("无票了");
$ a' |$ r4 C3 t7 a V }4 O8 P" I; u4 [2 Z/ x
}5 M/ Y* i/ \. B' O
//每卖一张 睡1000毫秒
8 c ^6 U) F' s0 v1 X+ `2 P try {
8 e+ l: b g: I sleep(1000);
: g4 B- e# c$ h! b, x# n } catch (InterruptedException e) {
4 a5 E, M" n. k% A7 e! B0 w e.printStackTrace();. N3 X+ M( e9 P2 |; t; I$ X. c
}& ]' N0 F; y' p
}
7 b% E/ e6 U4 Q( E( |: I }! j& `) m( Z! z4 N
% Q3 k4 a' D# p5 _6 Q& f8 G}2 o8 X) r) j% u% _1 ]
$ m4 t* ]: p1 X! o) I
& A' q+ u% e* {$ Ipackage com.javazx.test.thread;
G G$ h& i. [
$ X9 \3 M* Q& b/**
: s0 `4 \8 E. B/ `2 B* w# l" d * 窗口类
# P O, p, }% T; M, a1 C9 B* b */1 `" m: q. p! X( _9 w4 `# Y
public class Windows {
6 J1 q! O( R. e% n% ? public static void main(String[] args) {. {4 [7 u; A* ?. W* C) d4 Q
//初始化三个卖票窗口& j' {' q- Q+ V# s" \
Station s1 = new Station("窗口1");
R4 M1 p2 t! ?0 d! n Station s2 = new Station("窗口2");/ u& g @7 E3 Z9 [& u# }7 }
Station s3 = new Station("窗口3");) l% W$ z* p8 x7 v+ @
/ Q5 I' O1 H& d
//三个窗口开始卖票
5 @$ V3 D* E6 d4 P7 s s1.start();9 K( ?# X: ~# h+ Y
s2.start();
% h0 ?0 y6 \ c) l1 F s3.start();' I0 `* C- w& w
7 ^6 Y t# D* a) I& z }
9 O! B5 l0 M8 v1 ^( T7 ^9 I6 m, Q}0 O7 C) m8 Y: h" u; k' ]+ \3 Z @
; Y m, W E/ K; [
& Y' j; L+ f8 B( u: `( t- D
运行结果:
+ {3 }% S* Y, Y8 o/ X& V' o# ^$ ?1 ^% C4 B' N# \' f, [! {
窗口1卖出了第1张票
& v" Z q+ {8 |# i0 _: h窗口3卖出了第2张票
/ a+ t) m+ y3 X, P' d: ^窗口2卖出了第3张票
: h: @! s$ [7 x p: h' g, \窗口1卖出了第4张票% G3 Q( ~/ i- O& D9 Q" s
窗口2卖出了第5张票! h$ d5 @. o, ~2 D( H9 ]& i* w& c
窗口3卖出了第6张票
( q% u g$ k8 d& a4 i窗口1卖出了第7张票
. m: t5 j* Y6 a n窗口2卖出了第8张票. B3 b$ q3 v# q" u2 ]! ^
窗口3卖出了第9张票
, R+ P; j: d9 g窗口3卖出了第10张票4 W* ` B! y8 ]1 w' w# @; h
窗口2卖出了第11张票1 ~2 y( z7 L! a# s
窗口1卖出了第12张票' |' N# y+ h2 q- J$ q3 S
窗口3卖出了第13张票, e& e) o9 o) _9 V
窗口2卖出了第14张票# \7 E% e3 H% p5 e3 `' d5 E
窗口1卖出了第15张票5 d- I2 k* G6 R6 ?. o$ i# C
窗口3卖出了第16张票
T2 S4 U2 ~/ e窗口2卖出了第17张票
! g& I1 ?1 h' Y窗口1卖出了第18张票- D% {6 s, s$ k+ @+ E9 C" }! i( z
窗口3卖出了第19张票
4 ?6 [+ K2 Q' z6 C窗口1卖出了第20张票
$ A1 \9 b5 Y' |# Z, Z无票了
! Z4 [7 ~6 u* Q
+ \# M% X2 x+ G$ {6 G9 t7 @3 q+ o) W
- x/ b! `. ? G& ]; U( X* w5 ?1 k* O" k7 a3 l1 R: g! S
% Y3 _+ r! A" H7 n8 y. l. N' F# y |
|