# ThreadLocal 底层如何实现

...

# ThreadLocal 为什么会内存泄露

ThreadLocal 是一个类似 HashMap 的数据结构

ThreadLocal 的实现原理就是通过 set 把 value set 到线程的 threadlocals 属性中,threadlocals 是一个 Map, 其中 key 是 ThreadLocal 的 this 引用,value 是我们 set 的值

# sleep () 和 wait () 有何区别

sleep()wait()
所属类不同ThreadObject
方法类型不同静态方法实例方法
使用语法不同thread.sleep(time)得先拿到锁 synchronize (t)
唤醒方式不同必须传时间 timet.notify
释放锁资源不同不释放锁资源 (就是为了让线程等待)释放锁资源 (协调线程同步)
线程状态不同TIMED_WAITTINGWAITTING

# 多个线程如何保证按顺序执行

  1. 通过 join () 方法使当前线程 "阻塞", 等待指定线程执行完毕后继续执行;
  2. 通过创建单一化线程池 newSingleThreadExecutor () 实现
  3. 通过倒数计时器 CountDownLatch 实现
  4. 使用 Object 的 wait/notify 方法实现
  5. 使用线程的 Condition (条件变量) 方法实现
  6. 使用线程的 CyclicBarrier (回环栅栏) 方法实现
  7. 使用线程的 Semaphore (信号量) 方法实现

# JAVA 线程池中 submit () 和 execute () 方法有何区别

  1. 两个方法都可以向线程池中提交任务
  2. execute 只能提交 Runnable, 无返回值
  3. submit 既可以提交 Runnable, 返回值为 null, 也可以提交 Callable, 返回值 Future
  4. execute () 方法定义在 Executor 接口中
  5. submit () 方法定义在 ExecutorService 接口中
  6. execute 执行任务遇到异常会直接抛出
  7. submit 执行任务时遇到异常不会直接抛出,只有调用 Future 的 get () 方法获取返回值时,才会抛出异常
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KagurazakaAsahi 微信支付

微信支付