|
demo项目名称:《项目java多线程售票实例源码》0 z( p; l: Q7 w! f2 {* _
java源代码:
, [% i4 s% q0 P/ Q# R1 qpackage com.javazx.test.thread;
, s9 A* q% k1 S3 E8 L; |0 i+ @6 j" z4 _
/**9 M* b4 L* b/ ]4 ]& P3 @' ]
* 车站类- [" E4 W! v# z' K+ f2 a- r
*/
2 _4 g) q# W& _! _+ hpublic class Station extends Thread {, g B+ k) N( O( L4 z2 T
/ I p4 Q z9 j3 n: ? //构造方法 线程起名" U. j N9 c* X f4 B
public Station(String name) {
* Q; U; p* {2 y o4 N$ d2 x super(name);
& B4 [" h7 _: x- N. F }! x- b$ K+ C+ n9 L# y5 D
/ v/ Y' m4 r, C2 [ U
static int tick = 20;//票总数
: O( j3 @9 \% p. v" K6 n static int step = 0;//当前是第几张票+ q5 K5 U( {, O6 O
static Object ob = "aa";//锁对象 随意起名8 t: ?7 [- {- T4 j6 E% A) a4 a
; ^2 y2 q7 T" m1 _
//重写run方法9 a( ?" C4 ?+ S' C$ X
@Override
/ @ c' d! a2 z" h) e5 e# u+ b public void run() {/ e/ x% H7 u$ F; _, A! x0 p
while (tick > 0) {
/ p( d" \+ Z4 Q; G' w/ [* ]3 ^# ^ synchronized (ob) {
/ l0 j: |$ Z# Y! F7 x if (tick > 0) {3 [# y: c+ R7 @; r8 I( F" k
step++;
2 {" b7 v+ x, A5 j) T9 t+ W F System.out.println(getName() + "卖出了第" + step + "张票");
$ U" R/ |) l3 w* M9 ]" U tick--;
+ T! |9 p$ F+ E4 E n: F } else {' N; u2 I$ ?# F; n
System.out.println("无票了");% e5 r( m8 R; \3 Y$ K
}
1 y7 j4 G- H3 d }, m0 w5 @+ _% ^2 D% s
//每卖一张 睡1000毫秒
; i3 [# M$ Q4 h try {
( c5 C o) l }% B2 ?: @( E! q$ A sleep(1000);3 O: y: c' @6 ]" q- o2 r% C
} catch (InterruptedException e) {
c1 p8 B- ?- G' e, W: j1 i( ^ e.printStackTrace();' W: P5 z. o2 l! f% Y+ n/ s
}
; A4 M l! L: t7 b5 M }% p9 d1 f& r3 U8 d
}0 s! ]- C* P; n. a3 B
! G# O" |( h; w+ O! Z, I) E}& O! [3 ]8 J) p! K, W' n* w; J
9 k4 m: j, R( T1 w! K3 c: b: k
& V+ ^0 i9 r( d& k
package com.javazx.test.thread;
% `, }' ~. L" p3 y) v6 H( j7 @$ ~( X" ^) X5 f% ~# u
/**6 C# G. T) X U* Z0 m" k) l: i/ \5 P
* 窗口类6 F [5 M- J: p3 K+ @% v
*/' [* d1 p7 w1 l, R1 Z% O/ u
public class Windows {
2 g" {3 c& o6 C+ P9 m! ^ public static void main(String[] args) {
$ h$ }' @% r4 u8 O //初始化三个卖票窗口2 A @% F% `& O# Z ^
Station s1 = new Station("窗口1");* d1 y8 `$ f5 Z8 d( v, `4 S
Station s2 = new Station("窗口2");
- z6 _ b. q" [* _0 P Y Station s3 = new Station("窗口3");
" [7 \: @; Y7 M- Y* Z. S: S
3 \$ R% Q% U& X7 y3 c //三个窗口开始卖票5 V) P( P; `, F& u6 ? y
s1.start();( b. n+ _9 i' z5 Q- M
s2.start();
* s: C' I& I3 `. A; @7 r- h- v: B s3.start();9 j; d/ A9 S% @8 ^: v
- d3 |# R. g) u' ~: ]( o, I }3 J9 S8 R4 }1 Q% Q& o, _2 [
}
% l$ |% j& \) G
) c7 p/ U4 `5 x$ A, _8 E+ I% E
4 w; x3 o# G% T4 I: i' O运行结果:; f1 }' D, \, F, h$ c
6 z* P# s! w2 E$ E6 a
窗口1卖出了第1张票) B7 a) P( A2 o0 \2 Y% M
窗口3卖出了第2张票: L2 S% D' b& a8 r8 J0 v( C% k4 Z
窗口2卖出了第3张票
' {4 E* D/ \' `8 O, j3 V窗口1卖出了第4张票3 ~( `3 Z: e d+ O
窗口2卖出了第5张票6 Q7 b3 C" r: |, l- ~# E4 X6 E
窗口3卖出了第6张票9 v0 c3 Z0 M5 j1 {4 t2 E' e; E S
窗口1卖出了第7张票7 l. T/ r5 \' [4 n4 ]
窗口2卖出了第8张票8 j' ?6 e$ E% s
窗口3卖出了第9张票7 @' T! c# }% u' s
窗口3卖出了第10张票& {' X4 k/ F/ E8 H8 t! r
窗口2卖出了第11张票
0 [- V0 ^- t6 |* d+ K( |窗口1卖出了第12张票% ]- @0 ]4 s' E( D% `) X
窗口3卖出了第13张票/ s' T2 }; B5 q* O: ]; R
窗口2卖出了第14张票9 Z, r* `! \+ f' S0 |( D
窗口1卖出了第15张票! |6 ^) i8 f, @ N# A! F* [" b. n
窗口3卖出了第16张票8 T8 o J1 R! @
窗口2卖出了第17张票
3 o% B5 V3 q8 Y, e* ?9 K窗口1卖出了第18张票0 N, }, _1 R8 c9 { V7 e
窗口3卖出了第19张票& b1 q$ ^3 ^9 ]; R
窗口1卖出了第20张票- Y% b2 U2 u0 q$ ]8 \
无票了& W' {8 f9 ?3 ?, {7 M
) F0 r# ~7 \" d E. J# h- Z, @) I
; l" E. Y. X1 U
3 g; b, H2 |0 Y- y. b' O6 H! d: k2 j) P
|
|