目录
7、线程的 sleep() 方法和 yield() 方法有什么区别?
9、Thread 调用 start() 方法和调用 run() 方法的区别
13、为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?
1、并发编程三要素
(1)原子性
(2)可见性
(3)有序性
2、什么是线程和进程
进程是指在系统中正在运行的一个应用程序,程序一旦运行就是进程。比如.exe文件运行,进程就可以视为程序的一个实例,大部分程序都可以运行多个实例进程
线程是进程的一个子集,一个线程就是一个指令流的执行,线程按照一定的顺序把这些指令流交给CPU执行,就是线程的执行
3、创建线程的方式
(1)继承Thread类
(2)实现Runnable接口
(3)通过Callable 返回值 Future
(4)通过线程池
4、Java线程具有五种基本状态
(1)新建状态(New)
(2)就绪状态(Runnable)
(3)运行状态(Running)
(4)阻塞状态(Blocked)
(5)死亡状态(Dead)
5、四种线程池的创建 (Excutors)
(1)newCachedThreadPool创建一个可缓存线程池
(2)newFixedThreadPool创建一个定长线程池,可控制线程最大并发数
(3)newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行
(4)newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务
6、wait() 和 sleep() 方法的区别
1. sleep() 来自 Thread 类,wait() 来自 Object 类。
2. sleep 不会让线程释放同步锁的。wait() 会释放同步锁,让其他线程进入 synchronized 代码块执行。
3. sleep() 可以在任何地方使用。wait() 只能在同步控制方法或者同步控制块里面使用,否则会抛 IllegalMonitorStateException。
4. sleep() 在时间到了之后会重新恢复;wait() 则需要其他线程调用同一对象的 notify()/nofityAll() 才能重新恢复。
7、线程的 sleep() 方法和 yield() 方法有什么区别?
线程执行 sleep() 方法后进入超时等待(TIME