线程的2种创建方式

简介: 当一个类继承了Thread类,该类就可以当作线程使用。run方法其实是一个普通方法,是Runnable接口的一个方法。Thread类也是进行了重写。真正实现多线程的start方法中的start0方法。这是一个本地native方法,由c/c++实现。

1)继承Thread类,重写run方法。

public class A extend Thread{
}


当一个类继承了Thread类,该类就可以当作线程使用。


run方法其实是一个普通方法,是Runnable接口的一个方法。


Thread类也是进行了重写。


真正实现多线程的start方法中的start0方法。


这是一个本地native方法,由c/c++实现。



2)实现Runnable接口,重写run方法。

public class B implements Runnable{
}


用A类实现Runnable接口


创建Thread对象,把A类的实例对象放进Thread类的构造函数。


再调用start方法。

Dog dog=new Dog();
Thread thread=new Thread(dog);
thread.start();


为什么还要用Thread类呢?


因为没有start方法。


start方法会直接调用dog类中重写的run方法。


底层使用了代理模式。(采用了韩顺平老师的举例)

class ThreadProxy implements Runnable{
    private Runnable target=null;
    @Override
    public void run(){
        if(target!=null){
            target.run();//动态绑定(运行类型)
        }
    }
    //构造方法
    public ThreadProxy (Runnable target){
        this.target=target;
    }    
    public void start(){    
        start0();
    }
    public void start0(){
        run();
    }
}

实现Runnbable接口适合多个线程共享一个资源的情况,且避免了单继承的限制。

A a=new A();
Thread thread1=new Thread(a);
Thread thread2=new Thread(a);
thread1.start();
thread2.start();



目录
相关文章
|
5月前
|
缓存 Java
线程的四种创建方式
线程的四种创建方式
|
5月前
线程间的同步的方式有哪些
线程间的同步的方式有哪些
|
5月前
|
Java API 调度
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
55 0
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
|
6月前
|
缓存 Java
线程池的7种创建方式(一)
线程池的7种创建方式
111 0
|
6月前
|
存储 安全 Java
线程池的7种创建方式(二)
线程池的7种创建方式
|
8月前
|
Java API 调度
线程的创建和使用
线程的创建和使用
31 0
|
10月前
|
消息中间件 Java
什么是线程和进程?是如何创建、同步、通信、销毁的?
什么是线程和进程?是如何创建、同步、通信、销毁的?
102 0
|
12月前
|
Java
线程和进程概念区别—及线程常用方法和状态
进程和线程是操作系统中的两个基本概念。 进程是程序执行的基本单位,每个进程都有自己独立的内存空间和系统资源,它拥有自己的虚拟地址空间、代码段、数据段、堆栈段等。一个程序可以对应多个进程,每个进程之间是独立运行的,互相之间不会影响。
131 0
|
设计模式 安全 Java
多线程的创建、线程的状态和调度and同步、join和yield以及单例设计模式的种类
多线程的创建、线程的状态和调度and同步、join和yield以及单例设计模式的种类
77 0