Java面试题(十三)多线程难点有哪些?

2026-05-15 22:590阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计6811个文字,预计阅读时间需要28分钟。

Java面试题(十三)多线程难点有哪些?

4.11 子线程如何优先执行,主线程再执行?

参考答案:启动子线程后,立即调用该线程的join()方法,主线程必须等待子线程执行完成后再执行。

4.11 如何实现子线程先执行,主线程再执行?

参考答案

启动子线程后,立即调用该线程的join()方法,则主线程必须等待子线程执行完成后再执行。

扩展阅读

Thread类提供了让一个线程等待另一个线程完成的方法——join()方法。当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。

join()方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作。

4.12 阻塞线程的方式有哪些?

参考答案

当发生如下情况时,线程将会进入阻塞状态:

  • 线程调用sleep()方法主动放弃所占用的处理器资源;
  • 线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞;
  • 线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有;
  • 线程在等待某个通知(notify);
  • 程序调用了线程的suspend()方法将该线程挂起,但这个方法容易导致死锁,所以应该尽量避免使用该方法。

4.13 说一说synchronized与Lock的区别

参考答案

  • synchronized是Java关键字,在JVM层面实现加锁和解锁;Lock是一个接口,在代码层面实现加锁和解锁。
  • synchronized可以用在代码块上、方法上;Lock只能写在代码里。
  • 阅读全文

    本文共计6811个文字,预计阅读时间需要28分钟。

    Java面试题(十三)多线程难点有哪些?

    4.11 子线程如何优先执行,主线程再执行?

    参考答案:启动子线程后,立即调用该线程的join()方法,主线程必须等待子线程执行完成后再执行。

    4.11 如何实现子线程先执行,主线程再执行?

    参考答案

    启动子线程后,立即调用该线程的join()方法,则主线程必须等待子线程执行完成后再执行。

    扩展阅读

    Thread类提供了让一个线程等待另一个线程完成的方法——join()方法。当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。

    join()方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作。

    4.12 阻塞线程的方式有哪些?

    参考答案

    当发生如下情况时,线程将会进入阻塞状态:

    • 线程调用sleep()方法主动放弃所占用的处理器资源;
    • 线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞;
    • 线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有;
    • 线程在等待某个通知(notify);
    • 程序调用了线程的suspend()方法将该线程挂起,但这个方法容易导致死锁,所以应该尽量避免使用该方法。

    4.13 说一说synchronized与Lock的区别

    参考答案

  • synchronized是Java关键字,在JVM层面实现加锁和解锁;Lock是一个接口,在代码层面实现加锁和解锁。
  • synchronized可以用在代码块上、方法上;Lock只能写在代码里。
  • 阅读全文