【面试常问】线程中常用的方法

简介: 在我们日常开发中线程是必不可少的,那么线程中的方法也就成了面试中的高频问题,决定整理一下;如有错误还请个位指正!

说一下线程中常用的方法

      在我们日常开发中线程是必不可少的,那么线程中的方法也就成了面试中的高频问题,决定整理一下;如有错误还请个位指正!

@[toc]

写在前面

      线程相关的基本方法有wait(强迫一个线程等待),notify(通知一个线程继续执行),notifyAll(所有线程继续执行),sleep(强迫一个线程睡眠N毫秒),join(等待线程终止),yield(线程让步)等等;

获取和设置线程名称

线程的名字一般在启动前设置,两个名字可以重复但是一般不这样做;

  • public final void setName(String name):给线程可以设置线程名称
  • public final String getName():获取该线程名称
  • public static Thread currentThread():得到正在运行的线程

设置守护线程

      守护线程是运行在后台的一种特殊进程,在程序中只要有一个线程在运行,整个程序不会消失,设置一个守护线程即使程序结束,后台仍然会继续执行;在Java中垃圾回收线程就是特殊的守护线程;(用户线程和守护线程的区别在于,是否等待主线程依赖于主线程结束而结束

  • public final void setDaemon(boolean on):设一个线程是否是一个守护线程 ,参数如果为true守护线程/后台线程
  • public`final boolean `isDaemon():判断一个线程是否为守护线程;

join()方法

      在线程的操作中加入join()方法(类似于插队)让一个线程强制执行,此线程运行期间其他线程必须等待此线程执行完毕后才可以继续执行(进入就绪再次竞争时间片);

  • public final void join():让其他的线程加入到当前线程

sleep()方法

程序中调用sleep方法,可以使得线程暂时休眠;(类似于睡觉,醒来继续竞争

  • public static void sleep(long millis):让该线程休眠millis毫秒

yied()方法

在线程操作中,调用yied()方法可以使当前线程主动放弃时间片,回到就绪状态,竞争下一次时间片;(类似与礼让)

  • public static void yield():暂停当前正在执行的线程对象,并执行其他线程。

线程的优先级

Java程序中所有线程在运行之前都会在就绪状态,因此就存在优先级的问题!默认的优先级是5,

  • public final void setPriority(int newPriority):更改线程的优先级
  • public final int getPriority():获取优先级

优先级都是自定义的常量:
public static final int MAX_PRIORITY 10 :最大优先级
public static final int NORM_PRIORITY 5 :默认优先级
public static final int MIN_PRIORITY 1 :最小优先级

线程停止

当一个线程运行时,另外一个线程可以直接调用interrupt()方法中断其运行状态,也可以是stop()方法;

  • public void interrupt():中断线程一种状态(睡眠,其他状态…)
  • public final void stop():强迫线程停止执行(虽然过时方法,可以用)

线程唤醒(notify)

      Object类中的notify() 方法,唤醒在此对象监视器上等待的单个线程让其继续运行,如果所有线程都在此对象上等待,则会选择唤醒其中一个线程,选择是任意的,并在对实现做出决定时发生,线程通过调用其中一个wait() 方法,在对象的监视器上等待,直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程,被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争。类似的方法还有notifyAll() ,唤醒再次监视器上等待的所有线程;

其他方法

  1. sleep():强迫一个线程睡眠N毫秒;
  2. isAlive(): 判断一个线程是否存活;
  3. join(): 等待线程终止;
  4. activeCount(): 程序中活跃的线程数;
  5. enumerate(): 枚举程序中的线程;
  6. currentThread(): 得到当前线程;
  7. isDaemon(): 一个线程是否为守护线程;
  8. wait(): 强迫一个线程等待;
目录
相关文章
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
22天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
16 3
|
22天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
15 2
|
22天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
15 1
|
22天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
28 1
|
22天前
|
Java
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅。它们用于线程间通信,使线程能够协作完成任务。通过这些方法,生产者和消费者线程可以高效地管理共享资源,确保程序的有序运行。正确使用这些方法需要遵循同步规则,避免虚假唤醒等问题。示例代码展示了如何在生产者-消费者模型中使用`wait()`和`notify()`。
23 1
|
22天前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
33 1
|
22天前
|
Java
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件成立时被唤醒,从而有效解决数据一致性和同步问题。本文通过对比其他通信机制,展示了 `wait()` 和 `notify()` 的优势,并通过生产者-消费者模型的示例代码,详细说明了其使用方法和重要性。
24 1
|
27天前
|
监控 Java
在实际应用中选择线程异常捕获方法的考量
【10月更文挑战第15天】选择最适合的线程异常捕获方法需要综合考虑多种因素。没有一种方法是绝对最优的,需要根据具体情况进行权衡和选择。在实际应用中,还需要不断地实践和总结经验,以提高异常处理的效果和程序的稳定性。
19 3
|
27天前
|
监控 Java
捕获线程执行异常的多种方法
【10月更文挑战第15天】捕获线程执行异常的方法多种多样,每种方法都有其特点和适用场景。在实际开发中,需要根据具体情况选择合适的方法或结合多种方法来实现全面有效的线程异常捕获。这有助于提高程序的健壮性和稳定性,减少因线程异常带来的潜在风险。
19 1