1.线程之创建
线程的创建有3中,继承Thread,实现Runnable接口,实现Callable接口(了解)
一,继承Thread
1.创建多线程:继承Thread 重写run() 线程体
2.使用多线程:创建子类对象,调用对象.start() 启动线程(加入到线程组,有CPU自己管控)
缺点:单继承
本身存在的线程有 main() gc 异常
代码实现:
package com.cust.create; /** * * 描述: * 1.创建多线程:继承Thread 重写run() 线程体 * 2.使用多线程:创建子类对象,调用对象.start() * 启动线程(加入到线程组,有CPU自己管控) * @author cookie */ public class Rabbit extends Thread { @Override public void run() { for(int i = 0; i < 1000; i++){ System.out.println("rabit---->"+i); } } public static void main(String[] args) { Rabbit rab = new Rabbit(); Tor tor = new Tor(); rab.start(); tor.start(); for(int i = 0; i < 1000; i++){ System.out.println("main---->"+i); } } } class Tor extends Thread { @Override public void run() { for(int i = 0; i < 1000; i++){ System.out.println("tor---->"+i); } } }
二,使用Runnbale接口实现多线程
静态代理
1,真实角色
2,代理角色 + 持有真实角色的引用
3,实现相同的接口
优点:1,避免单继承 2,共享资源
1,纯静态代理例子:
package com.cust.create; /** * * 描述:静态代理 * 1,真实角色 * 2,代理角色 * 3,实现相同的接口 * * @author cookie */ public class StaticProxy { public static void main(String[] args) { //创建真实角色 Marry you = new You(); //创建代理角色 + 持有真实角色引用 WeddingCompany wc = new WeddingCompany(you); wc.marry(); } } interface Marry { void marry(); } //真实角色 class You implements Marry{ @Override public void marry() { System.out.println("you and ddd 结婚了...."); } } //婚庆公司---> 代理角色 class WeddingCompany implements Marry{ You you; // 持有真实角色的引用 public WeddingCompany() { } @Override public void marry() { you.marry(); } public WeddingCompany(Marry you) { this.you = (You) you; } }
2.多线程实现Runnable实例
package com.cust.create; /** * * 描述:真实角色 * @author cookie */ public class Proceduer implements Runnable { @Override public void run() { System.out.println("proceduer 敲代码...."); } public static void main(String[] args) { //创建真实角色 Proceduer pro = new Proceduer(); //创建代理角色 + 持有真实角色的引用 Thread t = new Thread(pro); //调用start()方法 t.start(); } }
3.资源共享实例:
package com.cust.create; /** * * 描述:Runnable优点:1,避免单继承 2,共享资源 * 共享资源实例 ---->12306抢票 * @author cookie */ public class Web12306 implements Runnable { int num = 50; @Override public void run() { while(true){ System.out.println(Thread.currentThread().getName() +"抢到了第张"+ num-- +"票"); if(num <=0){ break;//线程结束 } } } public static void main(String[] args) { Web12306 w = new Web12306(); Thread t1 = new Thread(w,"路人甲"); Thread t2 = new Thread(w,"黄牛乙"); Thread t3 = new Thread(w,"攻城狮"); t1.start(); t2.start(); t3.start(); } }
三、实现Callable接口
优点:可以有返回值,异常可以向外抛出