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

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

原文地址:https://www.cnblogs.com/blogofcookie/p/5930134.html