线程与进程
-
为什么需要多线程
发挥多核CPU的优势
防止阻塞
便于建模 -
创建现成的方式,一般有三种:
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口
实现接口的方式比继承类的方式更灵活,也能减少程序之间的耦合度,面向接口编程也是设计模式6大原则的核心
Tread类
runable接口
Callable接口
线程安全
- 不可变
- 绝对线程安全
- 相对线程安全
- 线程非安全
线程同步
线程间通信
线程死锁
线程优先级
线程控制:挂起、停止和恢复
线程的生命周期
几个问题
- start()方法与run()方法的区别
- Runnable接口和Callable接口的区别
- CyclicBarrier和CountDownLatch的区别
- Volatile关键字的作用
- 如何获取到线程dump文件
- 一个线程如果出现了运行时异常会怎么样
- 如何在两个县城建共享数据
- sleep方法和wait方法有什么区别
- 生产者消费者模型的作用是什么
- 为什么wait方法和notify/notifyAll方法要在同步快种调用
- ThreadLocal有什么用
- wait方法和notify/notifyAll方法在放弃对象监视器时有什么区别
- 为什么要使用线程池
- 怎么检测一个线程是否持有对象监视器
- synchronize和ReentrantLock的区别
- ConcurrentHashMap的并发度是什么
- ReadWriteLock是什么
- FutureTask是什么
- Linux环境下如何查找那个线程使用cpu最长
- Java编程写一个会导致死锁的程序
- 怎么唤醒一个阻塞的线程
- 不可变对象对多线程有什么帮助
- 什么是多线程的上下文切换
- 如果你提交任务时,线程池队列已满,这时会发生什么
- Java中用到的线程调度算法是什么
- Thread.sleep(0)的作用是什么
- 什么是自旋
- 什么是Java内存模型
- 什么是CAS
- 什么是乐观锁和悲观锁
- 什么是AQS
- 单例模式的线程安全性
- Semaphore有什么作用
- Hastable的size方法种明明只有一条语句“return count”,为什么还要做同步
- 线程类的构造方法、静态块是被哪个线程调用的
- 同步方法与同步快,哪个是更好的选择
- 高并发、任务执行时间短的业务怎么使用线程池?并发不高、任务执行时间长的业务怎么使用线程池?并发高、业务执行时间长的业务怎么使用线程池