zoukankan      html  css  js  c++  java
  • Runnable与Thread区别

    简述

    Runnable是接口,Thread是类且实现Runnable接口

    Thread线程是独立的不共享资源

    Runnable是资源共享

    在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。

    Thread类,有一个构造方法:public Thread(Runnable targer)

    此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。

    public Thread(Runnable runnable)  
    {  
        daemon = false;  
        stillborn = false;  
        threadLocals = null;  
        inheritableThreadLocals = null;  
        threadStatus = 0;  
        blockerLock = new Object();  
        init(null, runnable, (new StringBuilder()).append("Thread-").append(nextThreadNum()).toString(), 0L);  
    }  
    

      

    使用情况

    在程序开发中只要是多线程肯定永远以实现Runnable接口为主。

    实现Runnable接口相比继承Thread类有如下好处:
    1、避免继承的局限,一个类可以继承多个接口。
    2、适合于资源的共享。

    举例

    三个网友分别抢10张优惠券

    继承Thread

    /**
     * MyThreadWithExtends
     * 
     * @author Stephen
     * @time 2020-7-1 17:59:02
     */
    public class MyThreadWithExtends extends Thread {
    
    	private int number = 10;
    
    	@Override
    	public void run() {
    
    		for (int i = 0; i <= 100; i++) {
    			if (number > 0) {
    				number--;//优惠卷减一
    				System.out.println(Thread.currentThread().getName() + "顾客抢到手,剩余优惠券:" + number);
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		MyThreadWithExtends thread1 = new MyThreadWithExtends();
    		MyThreadWithExtends thread2 = new MyThreadWithExtends();
    		MyThreadWithExtends thread3 = new MyThreadWithExtends();
    
    		thread1.start();
    		thread2.start();
    		thread3.start();
    
    		// 每个线程都独立,不共享资源,每个线程都抢了10张,总共抢了30张。如果真抢,就有问题了。
    	}
    
    }
    

     

    运行结果

    /**
     * MyThreadWithExtends
     * 
     * @author Stephen
     * @time 2020-7-1 17:59:59
     */
    public class MyThreadWithExtends  implements Runnable {
    
    	private int number = 10;
    
    	@Override
    	public void run() {
    
    		for (int i = 0; i <= 100; i++) {
    			if (number > 0) {
    				number--;//优惠卷减一
    				System.out.println(Thread.currentThread().getName() + "顾客抢到手,剩余优惠券:" + number);
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		MyThreadWithExtends myClass = new MyThreadWithExtends();
    		Thread thread1 = new Thread(myClass,"网友1");
    		Thread thread2 = new Thread(myClass,"网友2");
    		Thread thread3 = new Thread(myClass,"网友3");
    
    		thread1.start();
    		thread2.start();
    		thread3.start();
    	}
    
    }
    

      

  • 相关阅读:
    130被围绕的区域
    695岛屿的最大面积
    200岛屿数量
    5314跳跃游戏IV
    375猜数字大小II
    464我能赢吗
    486预测赢家
    877石子游戏
    1000合并石头的最低成本
    5329数组大小减半
  • 原文地址:https://www.cnblogs.com/dzcici/p/13220817.html
Copyright © 2011-2022 走看看