首页 > 代码库 > 1.线程之创建

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接口

      优点:可以有返回值,异常可以向外抛出

 

1.线程之创建