|
demo项目名称:《项目java多线程售票实例源码》) }3 {+ @7 b( p' y0 ?
java源代码:
- e3 J2 [- }$ S. n6 Ipackage com.javazx.test.thread;
& f# H! j& z* Z# t
( C3 F6 w1 ^( |, R4 @& a4 ]/ w/**, m& z ?- o. Q* w8 |( [
* 车站类
7 C$ Y$ [$ c" ~! ?4 B9 D' N */6 {. q) a, ?8 h8 h0 w, {, `
public class Station extends Thread {
5 I- O9 k, b1 J6 V6 k3 ?: [+ I C" y% q: \7 D2 v5 k8 _
//构造方法 线程起名
8 L# e8 h* b$ q Q, z$ w4 S q public Station(String name) {
0 B. r/ N+ ?6 |: s6 E5 j8 d4 { super(name);
$ D5 [8 ^2 f$ z9 Y }
6 A: T( z/ G9 g1 v/ `
; T9 Q h* R$ N( s. ^ static int tick = 20;//票总数7 W- {8 R. j6 `" l" w5 ]0 i) E
static int step = 0;//当前是第几张票8 A" T2 g% p0 \- U# i8 r, C
static Object ob = "aa";//锁对象 随意起名4 o. Q" e- W& A3 r) v. p5 `8 u2 q
- V2 I. N" q, ]. B4 b5 ], @$ b! X //重写run方法9 K, e) S( \: Z/ b7 `5 ?: y
@Override; }$ o$ Q7 P9 N% l" N
public void run() {
5 L( |2 a% T+ S9 f- K+ I8 Z" m" V while (tick > 0) {! I7 B4 Z5 _7 D _
synchronized (ob) {
2 O) M: Z1 B9 U7 }' P* P+ W) L6 P- [ if (tick > 0) {
9 E. h/ |. S* h step++;
. V! Z$ z& k; U# b+ m% S System.out.println(getName() + "卖出了第" + step + "张票");
- D; j2 L$ ]: D4 B- q2 x& [. I tick--;/ R5 Y) q4 c! g ?2 _, m2 k
} else {
8 F5 q& I, [* d0 d" A9 {1 t S System.out.println("无票了");
1 }% S# \4 Q+ L( @ j0 e }* r1 x3 S" B4 o! D4 B+ p, ?1 R
}
( `7 B+ b' {# i! ` //每卖一张 睡1000毫秒
& z" ~7 G6 |8 O1 h try {
7 \) c$ I: P: J sleep(1000);
9 l+ n8 z+ Z3 i( U4 x5 B } catch (InterruptedException e) {' F" e5 E% r' A2 M1 C* r
e.printStackTrace();1 Z5 j3 P1 a8 f, r0 j6 K
}. {% P! w+ w: k
}
f! v @+ v0 `) \ }
x0 `7 l" t* w. x8 s6 d- E' K/ f' D% w4 A
}
% u+ C7 q& B z& V* x1 ~% m$ k- |) \# w7 |0 b a
3 R: m: x0 | U2 R5 [9 g; }+ W! z/ e
package com.javazx.test.thread;
" d: H5 P/ f" j6 {9 `
% k! t! a' H0 i# p7 S. Z4 m V2 Q# T/**
1 L( J' L# N! w d' A * 窗口类
, b- D1 { G) t5 @& }$ @ */
7 Q3 n+ D4 `3 S; j! q- T( Hpublic class Windows {" n9 B+ S' p$ n& W/ N6 E& C
public static void main(String[] args) {9 @2 N, t8 K, W
//初始化三个卖票窗口
+ t! d# e9 M4 n, A; H Station s1 = new Station("窗口1");
# }. J6 B0 z! C( a6 L7 x' _8 m Station s2 = new Station("窗口2");$ m5 ~' m/ J% P7 R" x5 C. ~
Station s3 = new Station("窗口3");
& |. k3 {. j6 D+ @
% N2 e, w. F- u# L& |. i //三个窗口开始卖票
E, }! w F0 u, q5 E/ _1 O s1.start();
" q+ w8 ~ D0 j5 q3 e: `; k s2.start();
; q# F: z2 T: [9 B" t, C( V: ~ s3.start();
& G- X, T2 g& H
6 d w( T: o6 N+ _* l+ d }
. x; Y! A6 |. a+ V5 a% x% w}/ }. F" @$ H2 `+ e2 Q
! N/ y$ g6 D. K. u$ `4 X8 Y4 b
% h6 `( n) E4 t8 I7 l3 i
运行结果:( g2 o1 p: s/ v3 E3 O: s
) @* c5 A# F+ h& S. G窗口1卖出了第1张票" M) u" n& |; ^9 f& b# t1 U9 k0 ?
窗口3卖出了第2张票- h6 g( r; a6 t: u% H, f: s* m
窗口2卖出了第3张票+ H8 ?' M( a& _6 x2 }- H
窗口1卖出了第4张票7 q; l0 y2 c$ k
窗口2卖出了第5张票
1 h' S. l8 |- C) t; ~窗口3卖出了第6张票9 \" ], d% D9 G2 s! L
窗口1卖出了第7张票& G( e C8 N( [4 s# j& Z* U* B
窗口2卖出了第8张票3 \2 p$ J2 I: j+ Z9 m4 f
窗口3卖出了第9张票
: P, Y3 S `3 d, c窗口3卖出了第10张票
# D U( e0 I6 m6 I9 U4 E H窗口2卖出了第11张票9 g( n( _7 f; @& S
窗口1卖出了第12张票( a4 r5 I: j( G/ I& j
窗口3卖出了第13张票
# C |7 d" B" ~, N* M z" k: n; Y窗口2卖出了第14张票
8 G: _+ B% R! O7 b+ l/ z窗口1卖出了第15张票3 g8 h- p/ j* e: ]/ X: d9 c; j
窗口3卖出了第16张票7 [2 [; w- f1 ~1 H
窗口2卖出了第17张票4 L H: h& v& ^/ C" h' V
窗口1卖出了第18张票4 d1 B% I' ^+ j B4 ?
窗口3卖出了第19张票 N% l# q8 n3 F$ H2 M
窗口1卖出了第20张票5 [: F% y" W1 D6 p2 y5 ?3 X- ?
无票了: l! P7 C% Q4 }7 }
; f! M' c; v |- u* W* \
2 k: m6 ]; c8 Y& @. z1 K% R
5 [ ~1 K5 U7 s5 H4 E
6 B6 t- S0 S: x, i/ }! } |
|