|
demo项目名称:《项目java多线程售票实例源码》
1 [& u5 m0 O/ D, Fjava源代码:
9 i" t& _/ Q- E% g) `0 \, }' vpackage com.javazx.test.thread;3 l2 Y5 v# k7 P( N/ o. p/ W5 V
2 `: i: u( c/ O
/**
$ J k; W3 K! m$ S * 车站类
( h7 T' @" C# B- B* `" k */
3 h: H4 w& ]- ~$ @ wpublic class Station extends Thread {
, M& i7 }3 {5 w }3 Z. \, h3 m$ S! m! v" Y" {; B6 ~* H6 S
//构造方法 线程起名
( B7 n$ f: p( Y1 h public Station(String name) {
7 U' [$ A1 V# F- K$ Y# O8 \ super(name);
/ i# ] q6 A$ H) \ }" j+ L/ G2 K( N
! l) f+ i5 g4 J0 @' x$ a; O4 B
static int tick = 20;//票总数
5 X/ Y1 i* F6 ~3 c- j static int step = 0;//当前是第几张票& n; m0 B* G. X/ p3 k
static Object ob = "aa";//锁对象 随意起名# M3 C- T7 R; r, i1 ~6 g" r
2 V% w5 F% |+ Y. z //重写run方法
- e/ P( m- W/ O$ H2 h9 O: p4 W! U @Override
! l( q$ G9 d0 F6 A. L/ Q' z public void run() {; x$ s3 n/ X' s4 b
while (tick > 0) {
9 K3 a3 l9 z' i$ {% X' B6 E2 n$ D8 l' h synchronized (ob) {/ r" U+ w: {8 e# O% }
if (tick > 0) {
9 ?# ~% P: F8 W2 e step++;/ W \9 {9 n2 E$ C
System.out.println(getName() + "卖出了第" + step + "张票");
+ k: B- { j/ S5 h. s9 Z7 r tick--;& }( J G( c/ {; f2 W' L" }/ h* h" D
} else {
- a' J7 F, ]) w; N$ T System.out.println("无票了");
' f1 J! }4 B+ n }" W6 m: | q8 g; \) S. P' f
}
" t3 b1 z/ ?1 Z //每卖一张 睡1000毫秒& V+ e- \; L# O4 ]) p* p+ r0 p, l
try {9 C3 C2 `# |, Y
sleep(1000);9 \$ \% S: b, g0 p
} catch (InterruptedException e) {
7 i3 t& l1 Y/ K4 g' y& n4 s e.printStackTrace();: ~8 o+ K* J6 _2 H4 [3 E4 s! D. H1 `6 A
}' d O. M, l* |/ b- J! x: y8 S
}; w; P) E5 u/ ] ?
}' D! ]8 E( p! ]9 t+ K- Z2 y
- E4 T7 d0 W& |. o4 b}" G$ _' m! x) a7 b: R$ E N8 M2 m# L8 ?
+ u% t) U$ ?: C. v+ v% G" o
# _5 r! C& k, b' L! Ypackage com.javazx.test.thread;
# y U) e. k5 d0 v' w7 n' m$ T
5 I/ [8 ]& ~6 [4 S2 Q2 W2 X/ ^/**3 x" d3 ?0 d0 y N
* 窗口类! e* V" Y0 n) J' L8 W2 z* I& \$ i* x
*/
- i# v% ?7 E4 _" n% d# I+ Jpublic class Windows {, z" b$ u0 V9 E0 D
public static void main(String[] args) {6 k t: [" V6 Z% O1 |+ H$ ^
//初始化三个卖票窗口
9 c3 B- S: ]& A Station s1 = new Station("窗口1");
$ K' h' B# j5 b {1 z Station s2 = new Station("窗口2");
6 ~) U5 k9 U2 |9 F% B/ Y Station s3 = new Station("窗口3");
! F! ~% F* u' b1 y6 w
* k6 F9 `( ^, q3 D+ r //三个窗口开始卖票
$ F* ]& b: A% ?8 T9 o: v s1.start();# y+ L- F. i& ? E, U/ `! b
s2.start();
7 b! }& g) m5 c J6 [ s3.start();& O3 U* Y' n3 A) [
5 e% Y; A7 x8 _4 Z r }
; `% A- {' R3 w2 ?}
/ `6 n B& R# L: Q
/ g, _9 I; O1 |/ f" G y+ f
& B5 p2 V; h) {& C$ x1 O运行结果:
/ p. E( j2 J/ U* a2 ]2 P6 z) b, j
; K0 m$ z' P1 w+ _& \窗口1卖出了第1张票
1 f J! ^% l# o& G9 \窗口3卖出了第2张票6 [% f7 v. F4 v3 A" D: T# P
窗口2卖出了第3张票
$ v1 {) s5 V6 i+ ?9 ]窗口1卖出了第4张票
9 U( d5 T8 `% L" P7 {& S5 {窗口2卖出了第5张票* y8 u. z$ k% b2 C( o
窗口3卖出了第6张票& l& l* M* T. Z+ U, w2 \ P
窗口1卖出了第7张票9 `, {" z, ~$ `3 q
窗口2卖出了第8张票! q1 A, Z" t4 ^: `$ K
窗口3卖出了第9张票! ^- i) A$ L, k" T
窗口3卖出了第10张票
( R1 `5 T, D1 m窗口2卖出了第11张票- l8 w+ `" c4 j& }. X/ y
窗口1卖出了第12张票8 E2 l. T' _* D9 y
窗口3卖出了第13张票
2 z. k, E# k* r5 o2 r* ^窗口2卖出了第14张票5 E) ]! M: i/ u
窗口1卖出了第15张票# D H! ?9 l# X1 \: V/ B1 v
窗口3卖出了第16张票3 |/ u9 ~* {/ q
窗口2卖出了第17张票
* s! a+ q- C" K1 j窗口1卖出了第18张票6 Z3 y1 v* V1 I/ h1 X. K" ?
窗口3卖出了第19张票& S7 j' T! _6 a5 }) e
窗口1卖出了第20张票
2 s! a& z- w% [: E1 u无票了
' d; m8 T' m$ f w- f) N% A) J. Q8 d, ?! R* N2 E1 Y
; ~5 ]# B4 ^. O. ?
5 ~. Y' g; f! Z, T/ i
& l7 |* y! A2 q$ P |
|