|
demo项目名称:《项目java多线程售票实例源码》
- R3 `- M, F- @8 S+ A' ^java源代码:( A6 O. C8 t9 A) c
package com.javazx.test.thread;, S) \4 p. Y; ]; ]4 L a$ I& q
0 i9 l' e( r7 _8 [
/**5 X/ P/ n) y7 V% |# D, S& U) V
* 车站类5 _- M* j- y! a9 _2 q. J
*/
2 j& E8 D$ p" a2 spublic class Station extends Thread {
1 L3 u& ?7 @: I
; ^" W$ X* k- [$ Y3 o3 v //构造方法 线程起名, b- e6 Y7 V9 U0 T3 V
public Station(String name) {
6 n1 K* K, P% q4 | _ super(name);
& j r0 Z) B ?2 d! H% i }
' {. d/ E: k5 I: S5 v2 d+ ]- S8 |) U, X& F3 E
static int tick = 20;//票总数" w5 ?7 M H5 @7 ]# M, ^ I7 u
static int step = 0;//当前是第几张票
( ~+ h3 p1 g2 Y& c5 z* X0 u static Object ob = "aa";//锁对象 随意起名
0 R% U* K9 W4 d& c, |
`" o( z3 q% f! l+ G- o0 o# p //重写run方法5 A- i, W0 P7 k: d
@Override
" p1 n+ i9 ~1 ]4 o: V1 X5 H public void run() {
6 G2 v3 O7 P9 }( ?5 y while (tick > 0) {
$ Z4 h5 [, v" ^ synchronized (ob) {. y# j& c$ [8 O% u# s5 ~: x, s/ J2 ~2 q
if (tick > 0) {
/ `) w+ B9 @2 w2 ? step++;) v) d1 N8 X. w0 a G' r
System.out.println(getName() + "卖出了第" + step + "张票");
2 \+ O- L: L9 ^. @! L# g tick--;3 q& W$ k3 M& S9 ~
} else {$ C) B: |9 j h0 {4 |
System.out.println("无票了");, v, |! T& a4 \, O! p/ a3 o0 Q% ]- q
}) D8 Y' ~6 Z( J7 u2 y8 F" d: J! e
}
# j4 L0 N( c5 e" `( x# q //每卖一张 睡1000毫秒
9 e0 Z+ j9 e0 f. b/ W try {
( [+ Z. h1 c! C1 \0 I sleep(1000);9 M4 E3 f+ E9 V; o |
} catch (InterruptedException e) {. [. n" ^) ^5 z; [" q0 ]! R+ Y( b
e.printStackTrace();( @4 V( v. X" C2 x! Z1 x" T
}
, V* a( d3 O8 U+ c! K* K0 { }
" i5 J: n1 I7 y0 Z; Z+ d9 p4 Z }
' d _6 F; [0 q9 D7 R$ q0 g
2 y7 S8 W9 W; z, V# i}
+ ]& l. Z* y5 j$ e# o) u/ I: L
1 {6 m0 d3 S, a
! b1 T; R0 e: G# |$ y1 apackage com.javazx.test.thread;
~+ C4 Y% l- l5 K$ j1 v, e0 M" k# w* x- y0 f
/**- c) N% k$ e9 F1 S, l
* 窗口类; g% Q S2 e1 M" U3 k6 M& a/ n
*/
5 c% f* a. P! spublic class Windows {* O) T6 `9 b: E" W8 k
public static void main(String[] args) {+ ~& A- p2 x" W4 ]
//初始化三个卖票窗口
6 j+ E: o8 ?6 N$ V4 Z) y3 \4 b Station s1 = new Station("窗口1"); O N; k: m7 a
Station s2 = new Station("窗口2");
6 k/ ^* O) D8 U: z9 K Station s3 = new Station("窗口3");' x ~1 ~1 s) y# c
: f2 ~ q6 T5 Z- g6 M //三个窗口开始卖票; c4 \/ y2 s2 f( K- m+ w
s1.start();
1 N' X0 D3 b( P! w! J s2.start();
! y0 v4 b6 @1 u) q s3.start();
' M9 z* o& @; W8 M6 j7 [7 q* O2 f4 R
}
' F* l2 J* v6 k8 z}9 [6 \- _2 i+ E
8 U& M0 N% P7 _9 |; N& L
/ s! f. W) }4 C6 v9 E
运行结果: |5 b. \7 j$ g. o) I
8 d; R) f2 ?. _ @. f% Y; a4 T
窗口1卖出了第1张票
7 {8 R! x) V& l" \/ f3 w4 c& I窗口3卖出了第2张票: X; P4 n3 P i! j( n# \
窗口2卖出了第3张票# f- {" H( k# ~$ X ~8 _* r5 p% O: N
窗口1卖出了第4张票' o' y; v5 V% F- {$ o) v! e
窗口2卖出了第5张票
9 ~3 _- P( G8 g/ k4 C& z窗口3卖出了第6张票( G* F6 l' Q- G/ I: X" y0 v& V
窗口1卖出了第7张票
) E5 R: @6 I2 N* c窗口2卖出了第8张票
( j; n) {9 ^& n/ r4 B+ b窗口3卖出了第9张票" d8 l6 A. L( T. o
窗口3卖出了第10张票
+ a9 |+ [" G6 r# \窗口2卖出了第11张票 g! ?6 W7 R4 W% y
窗口1卖出了第12张票
" j: x7 Q) V3 [% v* m* {窗口3卖出了第13张票0 f5 R. c/ r' o: u9 Z4 Y: q
窗口2卖出了第14张票
# Z! R( V: E0 P9 T( h. w9 N3 C窗口1卖出了第15张票4 b! [5 u, [1 C6 P3 B& D( t( u4 i
窗口3卖出了第16张票 y( [, ?) Q& B% `6 u& B
窗口2卖出了第17张票/ g! C& F+ B! z
窗口1卖出了第18张票. ?0 f2 ?9 G- n$ W% j1 O
窗口3卖出了第19张票
/ u3 b) b$ o7 X$ |2 c' _6 e窗口1卖出了第20张票! A( \$ ?7 a: a) F' O
无票了2 q) W6 H4 |9 S' j+ F+ x
( ^! H \4 C% I3 x" h
5 F. P3 s; b# Y7 e: M, {/ K
]2 r$ h, A( ]3 l
2 C) E- q( s: s# B7 o: i |
|