Java学习day15

线程

引言

什么是线程?

线程是操作系统调度的最小执行单位,它代表了一个独立的执行流。在Java中,线程是由java.lang.Thread类表示的。每个Java程序都至少有一个主线程,主线程由JVM自动创建和启动。

为什么需要使用线程?

使用线程可以实现多任务并发执行,提高程序的响应能力和效率。在单线程环境下,当一个任务阻塞时,整个程序都会被阻塞,无法进行其他任务。而使用多线程可以在一个线程阻塞时,让其他线程继续执行,从而提高程序的并发性和吞吐量。

线程基础

线程的状态和生命周期

线程有以下几种状态:

  • New:线程刚创建,还没有开始执行。
  • Runnable:线程从就绪状态转换为运行状态,此时线程开始执行。
  • Blocked:线程进入阻塞状态,等待获取锁。
  • Terminated:线程执行完毕。
  • Waiting:线程进入等待状态,等待其他线程通知。
  • Timed_Waiting:线程进入等待状态,等待其他线程通知,等待的时间为指定的时间。

线程的生命周期包括线程的创建、就绪、运行、阻塞和终止等阶段。

线程的创建和启动

创建线程的两种常见方式是继承Thread类和实现Runnable接口。通过重写run()方法定义线程的执行逻辑,然后调用start()方法启动线程。

线程的命名和优先级

可以为线程指定一个名称,方便识别和调试。

每个线程都有一个优先级,用于指示线程在竞争CPU时间时的相对重要,但不保证绝对的执行顺序。线程优先级用整数表示,范围从1(最低优先级)到10(最高优先级),默认为5。可以使用setPriority()方法设置线程的优先级。

Thread中的构造器及常用方法

  • 构造器:Thread类提供了多个构造器,可以指定线程的名称:

    • Thread():创建一个默认名称的线程。

    • Thread(Runnable r):创建一个线程,线程的代码从Runnable接口的实现类中来。

    • Thread(Runnable r, String name):创建一个线程,线程的代码从Runnable接口的实现类中来,线程的名称为name。

    • Thread(String name):创建一个线程,线程的名称为name。

  • run():线程执行的代码从run()方法开始,当线程执行完毕后,run()方法结束。

  • start():调用start()方法,线程就会开始执行。

  • sleep():调用sleep()方法,线程就会进入休眠状态,直到休眠时间结束,线程进入就绪状态。

  • yield():调用yield()方法,线程就会释放CPU资源,让出执行权给其他线程,但是不释放线程的资源,线程进入就绪状态。

  • stop():调用stop()方法,线程就会停止执行。

  • setName():调用setName()方法,设置线程的名称。

  • getName():调用getName()方法,获取线程的名称。

  • setPriority():调用setPriority()方法,设置线程的优先级。

  • getPriority():调用getPriority()方法,获取线程的优先级。

  • setDaemon():调用setDaemon()方法,设置线程为守护线程。

  • isDaemon():调用isDaemon()方法,判断线程是否为守护线程。

  • setContextClassLoader():调用setContextClassLoader()方法,设置线程的上下文类加载器。

  • getContextClassLoader():调用getContextClassLoader()方法,获取线程的上下文类加载器。

  • setUncaughtExceptionHandler():调用setUncaughtExceptionHandler()方法,设置线程的未捕获异常处理器。

  • getUncaughtExceptionHandler():调用getUncaughtExceptionHandler()方法,获取线程的未捕获异常处理器。

  • setDefaultUncaughtExceptionHandler():调用setDefaultUncaughtExceptionHandler()方法,设置默认的未捕获异常处理器。

  • getDefaultUncaughtExceptionHandler():调用getDefaultUncaughtExceptionHandler()方法,获取默认的未捕获异常处理器。

  • setStackTrace():调用setStackTrace(),设置线程的栈跟踪。

  • getStackTrace():调用getStackTrace(),获取线程的栈跟踪。

  • interrupt():将线程的中断状态设置为true。

线程通信

等待/通知机制

等待/通知机制是线程间进行协调和通信的重要机制之一。它基于对象的监视器(锁)实现,通过wait()notify()notifyAll()方法实现线程的等待和唤醒。

wait()、notify()和notifyAll()方法

wait()方法使当前线程进入等待状态,释放锁并等待被其他线程唤醒;`继续上述内容:

notify()方法用于唤醒一个正在等待的线程,而notifyAll()方法则唤醒所有正在等待的线程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值