zoukankan      html  css  js  c++  java
  • 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接口

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

  • 相关阅读:
    Cannot find a free socket for the debugger
    maven自己创建jar坐标(比如oracle驱动包)
    svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法
    java发http请求
    Spring MVC
    函数节流 防抖
    js 执行顺序
    铺平多维对象数组 js
    vue 线上图标404
    vue-devtools--------vue浏览器工具
  • 原文地址:https://www.cnblogs.com/blogofcookie/p/5930134.html
Copyright © 2011-2022 走看看