从零开始学java - 第二十二天

74 阅读2分钟

这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

今天继续~

线程的优先级

  • 每一个线程都有一个优先级
  • 线程的优先级是一个整数,取值范围为1-10
  • 默认情况下,一个线程的优先级为5
  • 高优先级的线程会比低优先级的线程更快的被分配资源

创建一个线程

  • 实现Runnable接口
  • 继承Thread
  • 通过Callable和Future创建线程

Thread方法

start() - 使该线程开始执行

run() - 如果线程使用独立的Runnable对象构造的,则调用该Runnable对象的run(),否则不执行任何操作直接的返回

setName(String name) - 改变线程名称为name

setPriority(int priority) - 更改线程的优先级为priority

setDaemon(boolean on) - 将该线程标记为守护线程或用户线程

join(long millisec) - 等待该线程终止的时间最长为millis毫秒

interrupt() - 中断线程

isAlive() - 测试线程是否处于活动状态

Thread静态方法

yield() - 暂停当前线程对象,并执行其他线程

sleep(long millisec) - 休眠指定的毫秒数

holdsLock(Object x) - 当且仅当指定的线程对象保持监视器锁时,返回true

currentThread() - 返回当前线程对象的引用

Stack() - 将当前线程的堆栈打印至标准错误流

创建线程的三种方式对比

  • 采用Runnable,Callable接口的方式创建多线程时,线程类还可以去继承其他类
  • 使用继承Thread类的方式创建多线程时,编写简单,无需使用Thread.currentThread(),直接使用this即可获得当前编程

线程的几个主要概念

  • 线程同步
  • 线程间通信
  • 线程死锁
  • 线程控制:挂起、停止和恢复

多线程的使用

  • 程序是并发执行而不是串行执行的,如果有两个子系统需要并发执行,这个时候就用上了多线程
  • 通过对多线程的使用可以编写出高效的程序,但也不能创建太多的线程,否则会导致效率降低
  • 上下文的切换开销很重要,如果拥有太多的线程,cpu花费上下文的切换的时间将多于线程执行的时间

今天就学到这里吧,下午了去把上面复习复习,午安~