多线程-静态代理的方式 - 实现Runnable接口

本文通过一个实例介绍了如何使用静态代理模式实现多线程,特别是通过实现Runnable接口。这种方式避免了单继承限制,方便共享资源。通过创建真实角色(Web12306类)并由Thread代理对象启动,展示了多线程抢票的模拟过程,强调了实现Runnable接口的优越性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在看这个小列子之前  

建议大家 最好 先理解一下 静态代理的概念.

http://blog.youkuaiyun.com/makemeasmile/article/details/55667574


其实我们的多线程 以实现 Runnable 接口的形式 这种方式  就是采用了我们的 静态代理模式

启用多线程步奏:

1)、真实角色  -  这个角色 就是你要去做的事情

2)、代理角色 -  这个同样也是已经提供好的 代理类 Thread类 

3)、有共同的接口- 这个接口当然是jdk已经提供好的 Runnable 接口

4)、代理角色持有 被代理 对象

5)、代理对象.start 方法 启用线程


推荐使用 实现Runnable 接口的方式 实现多线程,而不使用继承 Thread 的方式

1、避免单继承  (如果使用继承Thread方式,无法在继承其他类)

2、便于 共享资源   ---  看下面的列子  web12306 就是一个真实对象  也是共享的资源 大家都来抢他

按照以上步奏

 // 创建真实角色 

public class Web12306 implements Runnable{    / /真实角色


private int num =50;// 一共有50票的资源 

@Override 
public void run() {
while(true){
if(num<=0){
break;
}
System.out.println(Thread.currentThread().getName()+"抢到了第"+ num--+"张票");
}
}

public static void main(String[] args) {
//声明真实的对象实例
Web12306 web = new Web12306(); // 就这一个真实对象 所有代理都对这一个资源争抢运行 
//代理对象
Thread thread1 = new Thread(web, "路人甲");
Thread thread2 = new Thread(web, "黄牛乙");
Thread thread3 = new Thread(web, "学生丙");
thread1.start();
thread2.start(); 
thread3.start();
}

}

运行结果:

路人甲抢到了第50张票
路人甲抢到了第47张票
学生丙抢到了第48张票
黄牛乙抢到了第49张票
学生丙抢到了第45张票
黄牛乙抢到了第44张票
路人甲抢到了第46张票
黄牛乙抢到了第42张票
学生丙抢到了第43张票
学生丙抢到了第39张票
黄牛乙抢到了第40张票
路人甲抢到了第41张票
黄牛乙抢到了第37张票
学生丙抢到了第38张票
黄牛乙抢到了第35张票
路人甲抢到了第36张票
黄牛乙抢到了第33张票
学生丙抢到了第34张票
黄牛乙抢到了第31张票
路人甲抢到了第32张票
黄牛乙抢到了第29张票
学生丙抢到了第30张票
黄牛乙抢到了第27张票
路人甲抢到了第28张票
黄牛乙抢到了第25张票
学生丙抢到了第26张票
黄牛乙抢到了第23张票
黄牛乙抢到了第21张票
黄牛乙抢到了第20张票
路人甲抢到了第24张票
黄牛乙抢到了第19张票
学生丙抢到了第22张票
黄牛乙抢到了第17张票
路人甲抢到了第18张票
黄牛乙抢到了第15张票
学生丙抢到了第16张票
黄牛乙抢到了第13张票
路人甲抢到了第14张票
黄牛乙抢到了第11张票
学生丙抢到了第12张票
黄牛乙抢到了第9张票
路人甲抢到了第10张票
黄牛乙抢到了第7张票
学生丙抢到了第8张票
黄牛乙抢到了第5张票
路人甲抢到了第6张票
黄牛乙抢到了第3张票
黄牛乙抢到了第1张票
学生丙抢到了第4张票
路人甲抢到了第2张票

总结:

启用线程两种方式:

 1、继承Thread 类,重新run方法 ,然后对象.start 启动

2、实现 Runnable 接口, run方法

  启动采用静态代理的模式:

   1、创建真实角色

   2、创建代理对象 (Thread 持有 真实角色 引用)

   3、代理对象.start 启动


推荐使用 实现  Runnable 接口---  避免单继承局限性  -- 便于共享资源 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值