effective java 面试题_面试题总结(8) - Java Concurrency

学了两天,总结一下。我感觉Java

concurrency的面试会涉及到两个部分,一是一般的多线程的概念和用法,另一个就是Java自己的concurrency

library了。前者一般在学校都接触过,后者根据我的观察好像精通的人并不算多,

搞Java的大多还是搞J2EE的。因此面试中碰到很可能主要是考察多线程一般性的概念和用法。但是在学习的过程中发现Java的library也挺有用的,可以简化多线程编程,因此两个就一起总结了。

Java多线程很需要经验的积累,如果工作不用,或者没有做过相关项目的话,也不太可能理解的很深入。像算法有很多的OJ可以练习,多线程就不知道怎么提高了,也是我需要下一步来探索的,如果谁有好的idea可以分享一下。

今天order了《Java Concurrency

in Practice

》,还没入手。因此主要是通过以下三本书来学习的。

CC150:

由于基础差,我对于很多知识和概念的理解都是从CC150开始的,比如DP。CC150里讲解了多线程的最基本的概念,包括Thread,

Runnable, synchronized, lock, semephore,

deadlock, dining

philospher,等等。

Thinking in

Java:感觉非常有用。洋洋洒洒写了差不多200页,让我怀疑是不是准备面试就不需要Java Concurrency

in

Practice了。基本上涵盖了多线程的方方面面了,虽然不一定介绍的详细。

Effective

Java:内容不多,看了Thinking in

Java之后没有什么特别的感觉。

下面是总结出来的一个提纲,我还需要在这个提纲下继续学习,也应该会持续更新提纲。

1. How to implement

thread

implement Runnable:

recommended

implement Callable: has

return value

extends Thread

2. How to create

and start thread

Executor(Thread pool):

recommended

Thread.start

Timer

以上内容理解起来都比较简单。其实如果多线程不共享资源,更确切的说不共享mutable资源的话,是谈不上复杂的。但是一旦涉及到共享mutable

variable以后,所有的复杂问题开始接踵而至了。这也是为什么functional

programming更适合并行运算的原因,因为FP最基本的特性就是immutability了,这一下就解决了多线程主要的复杂问题了。

3. Synchronization:因为share mutable variable就会产生race

condition的问题,因此我们就需要同步了。下面是几种同步方式。

synchronized keyword: instance method, class method, code

block

Lock

Semaphore

ReadWriteLock

CountDownLatch, CyclicBarrier etc.

因为同步编程比较难掌控,因此最好是能够回避同步。下面是一些avoid

synchronization的办法。

Immutability like FP

ThreadLocal

volatile

Atomic Wrapper: java.util.concurrent.atomic

concurrent collection

CocurrentHashMap

(HashMap)

CopyOnWriteArrayList

CopyOnWriteArraySet

ConcurrentLinkedQueue

(Queue)

ConcurrentSkipListMap (TreeMap)

ConcurrentSkipListSet

(TreeSet)

4. Communiication:除了同步,线程之间还需要通信和协作。下面是几种通信方式。

wait, notify, notifyAll

Condition

Semaphore: can be used both for lock and

signal (can avoid missed signal)

concurrent collection

BlockingQueue

5. Common problems and solutions

Race condition (synchronization)

Deadlock (lock ordering, lock

timeout, deadlock

detection)

Starvation (fairness)

6. Common coding questions

blocking queue

producer/consumer

read write lock

reentrant read write lock

dining philospher

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值