|
demo项目名称:《项目java多线程售票实例源码》
1 E& {0 f% Q2 I+ q! A8 ^6 Ejava源代码:
/ N" W" X" @4 O5 R7 w2 O/ q4 \7 Wpackage com.javazx.test.thread;0 r) J& I& y/ R6 i
8 H O1 U) I4 `' r& Y3 {/**& O4 e3 ]2 Q& a) a+ L0 R
* 车站类
% r3 I5 P3 K/ l' O6 U* Z) n3 s */4 W; f8 {9 H$ n* w) W
public class Station extends Thread {
) D+ k$ u: x) y l, |& X2 q" g! n6 X9 V4 o- s! T# j" h! T4 U
//构造方法 线程起名" L4 M8 P" {! e- U0 o* x
public Station(String name) {* `. a/ R$ j. c% p
super(name);
2 E0 i/ Z1 m( M4 o9 z, j }
" d, ~2 H2 i% s9 H& r
5 q: c. k6 f7 [; V3 x static int tick = 20;//票总数7 L5 F: r6 D' _
static int step = 0;//当前是第几张票
# n/ H% c9 I$ J2 Q- }. q1 | static Object ob = "aa";//锁对象 随意起名9 I; }. E$ a$ A) K+ J7 D- U( n' u
5 ~) c% K' Q% T3 O" t3 i //重写run方法
c3 g/ F, [* r9 x+ V# d; h @Override
6 b1 U& c% V6 K public void run() {
# q8 X2 Y) k) d/ d) L$ |- F, l while (tick > 0) {
* M! ~: i2 | H J0 l0 C synchronized (ob) {% ?+ a2 v! A: N/ ^( j' g) r
if (tick > 0) {
3 }3 t( `# I) } step++;
+ k/ Q B3 X3 M; e System.out.println(getName() + "卖出了第" + step + "张票");
* r( F: A8 @7 v/ `: ~: |7 X4 ?: Z: K tick--;0 t p" Q$ r4 k
} else {
- _- ~+ {$ o; f9 D0 E0 o System.out.println("无票了");; V" H/ p6 q5 v/ f8 R, h; G J
}
' h7 }3 N9 N8 |$ \8 v* f }
) W& c+ T( i; g! `% U //每卖一张 睡1000毫秒
0 C [1 g" }, W try {
# G, H: W% h4 m/ f7 P; A: ? sleep(1000);
- ~# I4 A- g4 p2 l. l7 j/ J d } catch (InterruptedException e) {" |# r, j |+ S6 ?; x# T6 d
e.printStackTrace();- d; S% M) {3 E) k; z5 c3 X
}
1 I, T1 `, i8 z7 J }& p5 O5 i, D, O$ m3 C
}. K4 ^4 m, `/ o9 z/ S
, H9 S2 ]( B6 H3 d' Y1 F}& m8 _- G: q* G
: L( V; h# b5 Z: V) C8 D
( n/ s. Z; r- T% L/ opackage com.javazx.test.thread;
9 k5 |# U, h, `# r0 G6 H9 Y% N( @, H/ i
/**
1 s) Z3 W1 o+ U% C/ k3 e% o6 _ * 窗口类
2 D7 \6 G" I7 O0 r */1 O! U$ e* ]# N' {/ a
public class Windows { u! o# R, X( a( N2 t% M
public static void main(String[] args) {
% J+ e1 ^% i, O( q //初始化三个卖票窗口7 H4 ?: z- t5 ?" r) h
Station s1 = new Station("窗口1");
! D* w! X4 D- |8 `: H% ~; I; Z Station s2 = new Station("窗口2");: D* d% {2 h6 W. e5 k/ Y& L, c
Station s3 = new Station("窗口3");& z6 r6 s) N; W; T5 ?- `0 L
; f! {$ _1 r& X# @( T( ?, ^* f W
//三个窗口开始卖票+ K" [' N8 O. Q/ F
s1.start();
; B+ n- H9 g7 f& Z- y s2.start();* F. ~8 b8 J: {. c# @5 b
s3.start();% R c* ~: k. l7 _* t6 ]
1 g$ g# i# v8 o; }% r
}0 A; J% C# k( q+ Q4 {
}& P! j9 r3 @) H" @: c
2 V/ w( M5 Y c1 |
8 q) x3 I: L" w3 Z5 w( z
运行结果:" e e, @! r) A4 \! n3 w1 A7 a
! b9 F! J j9 ]9 q3 n5 o
窗口1卖出了第1张票 \. M, ?2 n$ J4 g' W* @. A
窗口3卖出了第2张票* D) o; _ K0 Q! X8 H
窗口2卖出了第3张票
( Q# `/ E8 a9 V, r窗口1卖出了第4张票
& s6 | e8 e4 k0 l窗口2卖出了第5张票
% Z9 v) L& j# K) I7 {, J窗口3卖出了第6张票
! S6 O5 P- L+ M窗口1卖出了第7张票6 A" `2 E3 n& ]1 Z# q4 u$ V
窗口2卖出了第8张票
( R; k8 N' V" y9 q8 j( P! o6 P7 c% ~窗口3卖出了第9张票
7 X- N4 _% Q8 U1 t. J q. b$ P窗口3卖出了第10张票7 a& }! i( Y, |/ K; A) N: V6 [* y3 y$ z" p
窗口2卖出了第11张票
! V" {7 N( T/ l" |窗口1卖出了第12张票7 q9 O4 h9 Z7 @2 y# l; r }
窗口3卖出了第13张票
+ L& Z1 f0 H. j; q. M1 u- ?窗口2卖出了第14张票: k% B1 t: Z4 @8 V0 r ?* X' u
窗口1卖出了第15张票- w. j0 g6 _# J! r$ z
窗口3卖出了第16张票! o- k/ @; D T1 N: g
窗口2卖出了第17张票' d3 `- j# b6 M4 @
窗口1卖出了第18张票
/ D' b* q: H& w4 G% \窗口3卖出了第19张票
; H! q, m k4 H窗口1卖出了第20张票
7 u* p, ~" b5 k* ]* }无票了
' q+ {/ D+ E9 H5 _7 O* m* c
! q& a4 ]0 n; v6 ~+ N. E1 ]$ ]3 F( W: O2 a) b
2 Q+ l k8 r6 q- g- Y
' v6 L$ ?( Z( t+ R/ v |
|