zoukankan      html  css  js  c++  java
  • Java线程面试题

    进程和线程

      1、进程和线程的关系

      2、进程和线程的效率关系

        io操作密集型 :多线程效率更高,因为线程创建要比进程创建开销少

        计算密集型 : 进程操作更快,因为多进程可以应用多核技术

     2、

      notify 和 notifyAll 区别

      锁池和等待池

        锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),

        由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,

        所以这些线程就进入了该对象的锁池中。


       等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁后,进入到了该对象的等待池中

       notify 和 notifyAll 区别 

        如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。

        当有线程调用了对象的 notifyAll()方法(唤醒所有 wait 线程)或 notify()方法(只随机唤醒一个 wait 线程),

        被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。

          也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,

        等待锁竞争优先级高的线程竞争到对象锁的概率大,

        假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用 wait()方法,它才会重新回到等待池中。

        而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized 代码块,它会释放掉该对象锁,

        这时锁池中的线程会继续竞争该对象锁。

  • 相关阅读:
    下载ts文件
    gradle plugins/repos/wrapper/tools 国内快速同步下载镜像
    两种方法教你绕过 TPM 2.0 安装 Win11,老电脑也能用 Win 11 了
    波兰极客用一张软盘运行Linux系统,用的还是最新内核
    ARM汇编编程基础
    String、String[]、ArrayList<String>之间的转换
    数据结构资源视频地址
    Zircon初体验-编译运行
    StarUML使用说明-指导手册
    华为RDPM项目管理方法
  • 原文地址:https://www.cnblogs.com/Jomini/p/15406279.html
Copyright © 2011-2022 走看看