🤖 AI文章摘要 qwen-turbo-latest
加载中...

线程控制

Thread类

Java通过Thread类开启并管理线程. 线程上下文是通过Runable接口的run方法定义, 而Thread实现了空run方法. 一种实现线程的方式是继承Thread类实现run方法,通过调用自身的run方法创建线程 另一种实现线程的方式是实现Runable接口,通过Thread类构造方法创建Thread类对象并调用run方法创建.

  • 线程的创建:
    • 继承Thread类并重写run方法, 其对象调用继承的start方法开启线程.
    • 实现Runable接口, 通过Thread类的构造方法封装成Thread类对象并调用其start方法开启线程(推荐)
  • 线程的生命周期: java的线程调度采用抢占式调度, 其线程状态转换如图所示
  • 线程安全: java使用锁机制来实现同步机制. java的锁对象也称为线程监视器, 可以是任意对象. 获得锁的线程可以执行, 否则阻塞.
    • 对象监视器: 对象监视器(对象锁)用来协调线程间的同步, 它可以是任意的对象.
      • public void wait() 或 public void wait(long) 当前线程进入无限等待状态或计时休眠状态, 并放弃锁.
      • public void notify() 或public void notifyAll(): 唤醒一个或全部正在等待的线程
    • 同步代码块: synchronized(对象监视器){同步代码块}
    • 同步方法: 使用synchronized修饰的方法. 非静态方法的锁对象是对象本身, 静态同步方法的锁对象是类(反射会讲)
  • 线程池: 线程池是一个用来存储已经创建的线程集合, 集中为线程分配任务和销毁线程. 使用线程池可以降低频繁创建和销毁线程的资源消耗. jdk1.5以后提供了维护线程池的类ThreadPoolExecutor. 不熟悉的强烈推荐使用其接口Executors提供的工具方法创建和使用线程池.
      public ExecutorServer newFixThreadPoolExecutor(int nThread) 创建一个指定大小的线程池
    使用ExecutorServer接口中的public void submit(Runable task)方法提交任务
    使用ExecutorServer接口中的public void shutdown()方法来销毁线程池(不建议使用) 
      

成员变量

成员方法

  //构造函数
public Thread(Runable r); 实现了Runable接口的类对象都可以作为参数传入, 线程创建时运行对象的run方法.

//成员函数
public void run() 从Runable接口实现的方法(空操作), 它是线程执行的代码
public void start() 使用start方法来创建一个线程并开始执行run中的代码, 一个Thread对象不能重复调用start方法
public String getName() 使用该方法获取线程的名称

//静态函数: 
public static Thread currentThread()使用该方法获取当前正在执行的线程
public static void sleep(long t) 正在运行的线程阻塞t毫秒
  

ReentrantLock类

这个类包含在java.util包中

成员变量

成员方法

  ReentrantLock类可以实现传统的锁机制, 推荐使用这种方式 
//构造函数: 
ReentrantLock()
//成员函数:
public void lock() 获取锁
public void unlock()释放锁