Java_SE09-多线程

注:一个方法中的局部内部类若想访问该方法中另外一个局部变量,该变量必须是final的

java.lang.Thread类是线程类,其每一个实例表示一个可以并发运行的线程。我们可以通过继承该类并重写run方法来定义一个具体的线程,其中重写run方法的目的是定义该线程要执行的逻辑

  1. 线程创建有两种方式:
    方式一:继承Thread并重写run方法
    优点:定义简单,适合匿名内部类快速创建线程
    缺点:*由于Java是单继承的,这就导致继承了Thread就不能再继承其他类,在项目中扩展性差
    *由于将线程与执行的任务定义在线程的run方法中, 导致线程与任务有一个强耦合关系,不利于线程重用
    方式二:单独定义线程任务的方式:实现Runnable接口,并重写抽象方法run来定义任务
  2. 代码执行有先后顺序的称为:”同步”执行,同步是在同一个线程中执行的代码
  3. void run()方法用来定义线程要执行的任务
  4. 启动线程应当使用线程的void start()方法,而不要直接调用run方法
    start方法会快速的执行完毕,作用是将线程纳入线程调度,使其具有并发执行的能力,一旦线程获取CPU时间片开始运行时,会自动调用自己的run方法,需要注意:在概念上不能理解为调用start方法时run方法被执行,而是start方法执行完毕后,该线程的run方法会很快地被执行(一旦获取时间片)
  5. 线程提供了一个静态方法:static Thread currentThread();该方法可以获取运行当前方法的进程
  6. 获取线程属性的相关API:
    String getName();获取名字,long getId();获取ID
    int getPriority();获取优先级,boolean isAlive();是否处于活动状态
    boolean isDaemon();是否是守护线程,boolean isInterrupted();是否被中断
  7. 线程优先级:线程不能干涉线程调度的工作,线程不能要时间片,只能被动的被分配,并且分配给哪个线程也是不可控的
    改变线程的优先级可以改变时间片分配几率,理论上,线程优先级高的线程获取CPU时间片的次数多
  8. static void sleep(long ms);该方法会阻塞运行当前方法的线程指定毫秒,当指定时间经过后,线程会重新回到Runnable状态,等待分配时间片并发运行
  9. void setDaemon();设置为守护线程的静态方法
    守护线程:当一个进程中的所有前台线程都结束时,进程结束,无论后台线程(守护线程)是否还在运行都要强制中断
  10. static void yield();用于使当前线程让出当次CPU时间片回到Runnable状态,等待重新分配时间片
  11. void join();该方法会阻塞运行该方法的线程,使其在join方法所属线程对象上等待,直到其完成工作才会解除阻塞继续执行,join是同来协调多个线程间同步工作的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值