- 静态代理实现
- 1.定义真实类 PickTicket 并实现 Runnable 接口
- 2.定义代理类 (例如系统标准的进程类:Thread) 并把 真实类 PickTicket 传入代理类汇总
- 4.代理类调用 start 启动进程
- *
真实类 PickTicket
package cn.thread;
/**
* @author Duoduo
* @version 1.0
* @date 2017/4/19 15:25
*/
public class PickTicket implements Runnable {
private int ticketNumber = 100;
private boolean flag = true;
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
while (flag) {
test1();
}
}
private synchronized void test2() {
if (ticketNumber <= 0) {
flag = false;
return;
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " get the ticket :" + " " + ticketNumber--);
}
private void test1() {
if (ticketNumber <= 0) {
flag = false;
return;
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " get the ticket :" + " " + ticketNumber--);
}
}
测试类 Test1
package cn.thread;
/**
* 静态代理实现
* 1.定义真实类 PickTicket 并实现 Runnable 接口
* 2.定义代理类 (例如系统标准的进程类:Thread) 并把 真实类 PickTicket 传入代理类汇总
* 4.代理类调用 start 启动进程
*
* @author Duoduo
* @version 1.0
* @date 2017/4/19 15:25
*/
public class Test1 {
public static void main(String[] args) {
PickTicket ticket = new PickTicket();
Thread proxy1 = new Thread(ticket, "路人甲");
Thread proxy2 = new Thread(ticket, "黄牛乙");
Thread proxy3 = new Thread(ticket, "攻城狮");
proxy1.start();
proxy2.start();
proxy3.start();
}
}
测试结果:
路人甲
黄牛乙
攻城狮
路人甲 get the ticket : 10
黄牛乙 get the ticket : 9
攻城狮 get the ticket : 8
路人甲 get the ticket : 7
黄牛乙 get the ticket : 6
攻城狮 get the ticket : 5
路人甲 get the ticket : 4
黄牛乙 get the ticket : 3
攻城狮 get the ticket : 2
路人甲 get the ticket : 1
攻城狮 get the ticket : 0
黄牛乙 get the ticket : -1