|
demo项目名称:《项目java多线程售票实例源码》8 h9 w# T5 `6 g
java源代码:
* e1 g. X5 V# d# _9 c xpackage com.javazx.test.thread;
( z2 a X9 ^; g3 A1 a0 w
3 w" D$ K4 c0 _/ ]" u! R8 c! w/**
4 Z" G7 H# o; F, t! f * 车站类: L) g; |& O9 o) N' q
*/0 R- w, W% E5 w& J
public class Station extends Thread {/ k2 j& ]5 r5 u
% h; [ X3 t$ J* i# k
//构造方法 线程起名; }- C3 ?$ e- P3 i( T+ h
public Station(String name) {
: N; [6 J3 j/ ~+ z* d* ^3 X super(name);
) Y" u" a. I# l& X. K( ^ }
) h( }2 g L+ Q( q
- ]/ @& \2 c3 f. S: K% K% r. U static int tick = 20;//票总数
+ ?3 k1 g9 R- C0 y; ?! n: K R static int step = 0;//当前是第几张票! s2 f1 U7 w6 |. a b
static Object ob = "aa";//锁对象 随意起名
+ M9 g6 [0 K" \3 P# y% v$ v% X- P! S: U/ Q) B8 s
//重写run方法
. E F W# @6 D3 w. E' f7 l2 o2 { @Override
6 g3 L- N: `* k* S; o K public void run() {- r6 M+ |4 W7 _$ x; @4 H
while (tick > 0) {! W) b( T( X/ g
synchronized (ob) {+ u4 C% r) B/ @0 d: r1 N; S- k. ?
if (tick > 0) {
! @6 D) v' q9 ~8 B; g step++;6 ] R# e' e1 }1 M
System.out.println(getName() + "卖出了第" + step + "张票");" M% o8 Q5 A- V9 @# C* a; w8 F
tick--;7 G4 w& h2 T& _" a
} else {
' j+ R2 I, ]% h( X- a, t3 L, r# W System.out.println("无票了");
3 x' C! M- I% {9 A! \ } F/ b" v. T; Q% }+ V6 ^; Y
}' J% _* e% n. N: ]- I% P
//每卖一张 睡1000毫秒
H* N5 a, {+ F6 y" |8 n, R+ O try {
2 a# z0 ]- Z! r( E sleep(1000);
+ @7 h3 ~+ O' ]: i } catch (InterruptedException e) {. N9 @2 C" n! q. r! E+ E. r
e.printStackTrace();
! x# C% m+ t; V2 ?) E* {+ c. i }
" j, a6 e* `* [& E9 } }
- _( N9 {4 o1 a' ^/ ?6 [6 j }- j0 J2 E( W( J: ^. e
% ^, E$ t0 j% ^: Q6 q: T
}2 j1 V" K% Q9 r8 h1 U( i1 A
$ L& e% s+ H5 f* y9 I
+ I# v+ i& M$ g& \8 W* Wpackage com.javazx.test.thread;, h% M' |6 g) l" ]7 G/ ^
, J$ A4 L3 f+ [% V) S8 `3 \/**/ {, T; a) k5 G' e
* 窗口类& I6 d8 f; z1 k
*/- |5 ^' b4 d& [" n' T& x( g. b
public class Windows {5 |8 P' n0 c% O0 V
public static void main(String[] args) {. s1 X% i! l! e% k$ \# L
//初始化三个卖票窗口% M! x6 V. q5 c P, S8 O
Station s1 = new Station("窗口1");
/ G! y& g( q( t q Station s2 = new Station("窗口2");1 V- b! @3 ~2 `: R7 J
Station s3 = new Station("窗口3");
; ]: B0 c$ g! I
, |. } P& n% z/ Q2 H3 w //三个窗口开始卖票
8 J7 ]( L% }/ ^: U+ y s1.start();( E9 J8 V/ m) N/ m4 c. E$ `
s2.start();, l4 }0 |9 Q8 r7 D( G. Z" k
s3.start();
8 O8 V1 i1 X% R! A; [. O) w
: c% j! I" v* I/ `/ Z3 v }
1 f) p! R8 W- Z& {: p}3 w0 T8 s: }) c5 w9 C
+ h! ^$ G; _% l+ |0 S, R' K
6 [$ ]: O8 z0 i
运行结果:
1 B6 @0 ~9 c. f3 E- q& l, x/ O8 _9 \
窗口1卖出了第1张票
5 Z9 H2 x# L% n窗口3卖出了第2张票% X$ Q9 n3 l7 G, U! M
窗口2卖出了第3张票
# x4 Q% z0 Z; b. V3 ~! S. ^: {窗口1卖出了第4张票% k, ~+ i! {# {, D2 j: ?4 a
窗口2卖出了第5张票
! w$ @, n4 W- W窗口3卖出了第6张票( H: M6 X- K, e. q
窗口1卖出了第7张票
' }8 N2 t8 ]2 ]" `. L& [) t窗口2卖出了第8张票- O9 x& A% N( |
窗口3卖出了第9张票. |* t, @7 Z: X* y+ |* Z
窗口3卖出了第10张票
& d9 O, }2 }, _( A) Q1 ~9 a* ~6 m窗口2卖出了第11张票5 J4 G/ R5 w' Y* A4 N2 P7 d
窗口1卖出了第12张票
9 T+ z! w( B) h) x7 i4 u; z窗口3卖出了第13张票2 W9 u" b" l" r; b* f4 }
窗口2卖出了第14张票( w+ ]5 |. T$ z" `5 t9 }
窗口1卖出了第15张票
6 d5 z/ {) X+ t6 h( g窗口3卖出了第16张票+ ?* s$ I5 t6 `: a: j5 B _
窗口2卖出了第17张票4 P! C: ^: C" W- }* ?' m3 Z, T
窗口1卖出了第18张票
8 ?0 W8 R/ q0 D4 H$ s窗口3卖出了第19张票
/ k8 k$ J+ T8 K" c+ t窗口1卖出了第20张票
% T7 d& A' m$ K) f# r9 r无票了7 L( `- O* M( {- e
1 r* \. _. B2 G9 k% z+ d% \
/ \! y# w9 {+ P" U( B
! Z c- Q2 ?% _) S' a6 F
6 q" I9 P( r4 E$ z* b7 c1 h
|
|