线程的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();



目录
相关文章
|
1月前
|
安全 Java 调度
线程的四种创建方式
【10月更文挑战第22天】在多线程编程中,还需要注意线程安全、死锁等问题,以确保程序的正确性和稳定性。通过合理地运用线程创建方式和相关技术,我们可以充分发挥多线程的优势,提高程序的性能和并发处理能力。
|
3月前
|
缓存 C语言
线程的创建过程
【9月更文挑战第15天】线程是由内核和用户态协同实现的机制。`pthread_create` 函数在 Glibc 中定义,首先处理线程属性参数,如栈大小,默认值或传入值。每个线程有一个 `pthread` 结构来维护状态。创建线程时,需要分配线程栈,并进行以下操作:获取栈大小、设置保护区域、缓存管理、内存映射、栈初始化及保护、填充 `pthread` 结构并管理栈缓存。最终通过 `create_thread` 函数调用 `clone` 系统调用创建线程,共享进程数据结构
|
6月前
|
Linux API
Linux线程总结---线程的创建、退出、取消、回收、分离属性
Linux线程总结---线程的创建、退出、取消、回收、分离属性
|
7月前
|
Java API 调度
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
80 0
Java多线程基础(线程与进程的区别,线程的创建方式及常用api,线程的状态)
|
7月前
线程间的同步的方式有哪些
线程间的同步的方式有哪些
|
缓存 Java
线程池的7种创建方式(一)
线程池的7种创建方式
176 0
|
存储 安全 Java
线程池的7种创建方式(二)
线程池的7种创建方式
|
Java API 调度
线程的创建和使用
线程的创建和使用
59 0
|
Java
创建多线程的方式四:使用线程池
创建多线程的方式四:使用线程池
60 0
|
消息中间件 Java
什么是线程和进程?是如何创建、同步、通信、销毁的?
什么是线程和进程?是如何创建、同步、通信、销毁的?
144 0