一、继承实现多线程
Rabit.java
package cn.thread; /* * 模拟龟兔赛跑 * 1.创建多线程 继承Thread +重run(线程体) */ public class Rabit extends Thread { @Override public void run() { for(int i=0;i<100;i++) { System.out.println("兔子跑了"+i+"步"); } } } class Tortoise extends Thread { @Override public void run() { for(int i=0;i<100;i++) { System.out.println("乌龟跑了"+i+"步"); } } }
RabitApp.java
package cn.thread; public class RabitApp { public static void main(String[] args) { //1.创建子类对象 Rabit rab=new Rabit(); Tortoise tor=new Tortoise(); //2.调用start()方法 rab.start(); tor.start(); for(int i=0;i<1000;i++) { System.out.println("main--"+i); } } }
效果
二、Runnable接口实现多线程
与继承方式比较:
1.静态代理(StaticProxy)
StaticProxy.java
package cn.thread; /* * 静态代理 设计模式 * 1、真实角色 * 2、代理角色 持有真实角色的引用 * 3、二者实现相同的接口 */ public class StaticProxy { public static void main(String[] args) { //创建真实角色 you y=new you(); //创建代理角色 WeddingCompany Company=new WeddingCompany(y); Company.marry(); } } //接口 interface Marry{ public abstract void marry(); } //真实角色 class you implements Marry{ @Override public void marry() { System.out.println("结婚了"); } } //代理角色 class WeddingCompany implements Marry{ private Marry you; public WeddingCompany() { } public WeddingCompany(Marry you) { this.you = you; } private void before() { System.out.println("布置猪窝。。。"); } private void after() { System.out.println("收拾猪窝.。。。"); } @Override public void marry() { before(); you.marry(); after(); } }
效果: