|
demo项目名称:《项目java多线程售票实例源码》
- r- y1 @$ A- m$ C8 F! B; ^java源代码:1 ]$ { b( H" H" y+ n% V" n* s( D; A
package com.javazx.test.thread;. V! r# `& D8 d& L# i7 b6 b0 X
, s3 F* ] ~- S8 L5 z/**7 T0 L7 ]. F, N+ [; x8 ^
* 车站类
6 A0 o4 L# W- u, n9 q; H */ h% D1 C9 }6 K) U
public class Station extends Thread {1 |3 s) p& y, u7 U9 ]% I' w
0 m& p* V I8 k/ H
//构造方法 线程起名( H, |1 E7 A) _% z* `1 R! H! ?
public Station(String name) {9 m1 d1 r+ H- P( y1 D6 d
super(name);
* e9 L7 ]: V0 p, v. | }+ l0 E: v# e- D9 D n' z
, U6 R' d3 v$ J8 I. m
static int tick = 20;//票总数) }" M1 N5 I) a' J7 k# {5 e
static int step = 0;//当前是第几张票# R" V% i! j& w( t5 D- |' C
static Object ob = "aa";//锁对象 随意起名/ e, z2 v& i6 ~+ o" O. W' U- a# {# y
& h4 I2 k6 ^- r, N% R( \5 A
//重写run方法! u) T- n" {. K. T+ ~3 ^
@Override
( m- s6 W3 W# c# o$ |( { public void run() {! i3 F! [- N9 u8 K" O' n
while (tick > 0) {! h- ]0 ^- A) L9 T4 w: F
synchronized (ob) {( ~7 z$ }( W0 Y7 P
if (tick > 0) {1 D3 W. `1 m+ V- e9 M$ g- I" U
step++;+ u2 v f1 ?- q( J% d% Q t4 V
System.out.println(getName() + "卖出了第" + step + "张票");6 m3 _/ m" s1 y
tick--;5 N) {9 i7 o- w5 Y W, h9 q
} else {
' C: [3 l! w% P+ D7 O0 h* D' ^ System.out.println("无票了");
8 o/ G% m0 f4 K, C, x. A# }1 _ }
v- T# r2 L* U1 X, N7 k' l* t }! r) R; p4 a' ^6 T5 |0 _
//每卖一张 睡1000毫秒
; w7 p$ o, ]% F" ^# m# } try {
: |1 K1 L" r" u( `# C sleep(1000);% z5 i: s0 u! e. \9 v
} catch (InterruptedException e) {
7 {3 p! Y9 c9 q2 s e.printStackTrace();
; T' p3 |' w7 x }3 {- W) f' w) l
}. z0 E" |6 \$ S% B' s
}* z! q4 Q( ]& i( Z/ P1 p
9 w0 J6 j1 S8 B, ?8 T' G
}
; w8 b: P. d7 e% e# A6 k3 u6 X3 e' p; M$ t6 W9 N! q
; _4 x \2 Q7 t: ` R4 l9 @3 ?package com.javazx.test.thread;
6 _% O; Y" a4 d J8 s
; P% T! L6 `) H1 X/**
7 I& Z. \4 U0 `0 J * 窗口类
7 m4 ] ]( `; s, X8 V) S */- x6 X0 o& F- F* @: Y
public class Windows {
5 \# V; C2 Q/ D: R public static void main(String[] args) {
* {8 N/ ?* ^ c! d5 Z$ B% v //初始化三个卖票窗口
) r) ^# v# H& [, V9 Z Station s1 = new Station("窗口1");; W9 x* o* u4 p7 Z, n" k0 Q
Station s2 = new Station("窗口2");) s. x4 O0 k; u
Station s3 = new Station("窗口3");
4 K* `3 X. N2 Q4 ?! N
! j5 W( r& f( J% f8 H) q& r //三个窗口开始卖票
. y, X3 ^1 Y, A% R7 R4 i# o' W s1.start();
# S' E' s8 E0 c$ a1 p! I5 U s2.start();
1 h( x) L, D/ R4 i, b. U% e s3.start();
+ h' ?0 w8 e6 i+ n+ @: u! C$ q: @! E
2 W4 ~4 N9 u& d ^2 L% g }2 J2 h' Y- O' \% K$ a7 |
}4 W p0 c3 _ Y
* G: q( k: v- n' |% u2 }9 R
! F* ?2 b& Z& g% Y: F* d9 c) O运行结果:
( f2 ?6 Z1 n% h7 V$ `: P7 a1 z
窗口1卖出了第1张票+ b' x6 [; ^8 R; y3 ~
窗口3卖出了第2张票- Z: G3 }% ?- \8 L* j
窗口2卖出了第3张票7 x5 I) k x( A- r3 f
窗口1卖出了第4张票
3 _3 y6 i" B/ W窗口2卖出了第5张票
/ W0 M6 ~' V( w5 P/ i窗口3卖出了第6张票
3 c7 V2 E- M X. D窗口1卖出了第7张票
- j, q/ y" |: k窗口2卖出了第8张票* T1 a# Z) R& Z6 s. q& @
窗口3卖出了第9张票, _! Z- p; U; p f+ D
窗口3卖出了第10张票' k6 B0 S# w/ I5 s; s+ ?& X
窗口2卖出了第11张票
! g- X% X" ^. k0 {" u. [4 i O! @! L窗口1卖出了第12张票
% {& o$ d0 s% {$ C. J窗口3卖出了第13张票, n7 u* J% b1 D* f* P+ L* F
窗口2卖出了第14张票" V h2 t1 {6 s, W( Y" {% u
窗口1卖出了第15张票' E4 |# D, m0 R% c2 t
窗口3卖出了第16张票
$ P& H* |1 O: P- H: j9 d! Z窗口2卖出了第17张票
" M0 ]/ h# Y9 Y窗口1卖出了第18张票
8 h2 D! ~% {" r8 v2 f E窗口3卖出了第19张票. C9 L4 K1 t% p2 G7 n4 k& w
窗口1卖出了第20张票
5 L, w6 e9 m" j7 r) w' S% S无票了7 p7 ]2 {' s5 Y# A
, o; s1 r K8 U( G5 Y5 f$ ~6 X% ?) S- t5 [# _2 ^' V
) ]8 o0 G _: g3 ^% F* L* ]: T
, j5 B* z |' O& k* l! U0 f) q4 f |
|