zoukankan      html  css  js  c++  java
  • 三、线程的创建


    1.继承的方式
    继承自Thread类,是所有线程类的父类,实现了对线程的抽取和封装

    使用步骤:
    a.定义一个类,继承自Thread类,并重写其中的run()方法【该run方法的方法体就代表了该线程的线程执行体,同时也是该线程需要处理的任务】
    b.实例化一个自定义类的对象,相当于创建一个线程【new】
    c.使用线程对象调用start(),表示该线程被开启【runnable】


    总结:
    a.如果一个线程中run方法中的代码执行完毕,说明该线程结束【dead】
    b.一般情况下,子线程都会创建在主线程中【mian方法的方法执行体就相当于是主线程的线程执行体】,多个子线程和主线程之间的关系是并发【多个并发执行的线程,并不是真正意义上的同时执行,实际上是争抢cpu时间片,cpu在不同的线程之间进行快速的切换】

    2.实现接口
    实现Runnable接口

    使用步骤:
    a.定义一个类,实现Runnable接口,实现接口中的run方法【该run方法的方法执行体就代表了线程的执行体】
    b.创建实现类的对象,并不是一个线程对象,而是作为一个参数传给Thread类,使用Thread类创建出来的对象才是真正的线程对象
    c.直接使用线程对象调用start方法启动线程


    3.采用两种方式创建线程的区别:
    a.实现Runnable接口的方式
    1>实现类只是实现了Runnable接口,同时可以继承其他的类【扩展性更强】
    2>多个线程可以使用同一个target,所以非常适合处理多个线程共享同一份资源的情况
    3>弊端:编程稍微复杂,不直观,如果要访问当前线程,必须使用Thread.currentThread()

    b.继承Thread类的方式
    1>编程稍微简单,直观,如果要访问当前的线程,可以通过Thread.currentThread(),可以直接通过super
    2>弊端:子类只能有一个父类【单继承】

    实际上大多数的多线程的应用完全可以用实现Runnable接口的方式【以后常用,使用匿名内部类替换】

  • 相关阅读:
    六、函数篇
    七、浅拷贝和深拷贝
    五、模块导入方法及常用模块
    四、注释与捕获参数
    三、python对字符串和集合的内存垃圾回收机制
    二、数据类型的常用方法
    一、基本数据类型
    工作必备之正则匹配、grep、sed、awk
    如何检查linux服务器是否被入侵
    linux查看磁盘类型(是否SSD盘)
  • 原文地址:https://www.cnblogs.com/lsp-lsp/p/7344302.html
Copyright © 2011-2022 走看看