1. 现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执

行?

  1. t1.start();<br /> t1.join();<br /> t2.start();<br /> t2.join();<br /> t3.start();<br /> t3.join();

2. 在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允

许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?

Lock接口最大的优势是为读和写分别提供了锁。

3. 在 java 中 wait 和 sleep 方法的不同?

通常会在电话面试中经常被问到的 Java 线程面试问题。最大的不同是在等待时 wait 会释放

锁,而 sleep 一直持有锁。Wait 通常被用于线程间交互,sleep 通常被用于暂停执行。

4. 用 Java 实现阻塞队列

5. 用 Java 编程一个会导致死锁的程序,你将怎么解决?

6. 什么是原子操作,Java 中的原子操作是什么?

原子操作:一个或多个操作在CPU执行过程中不被中断的特性。Java使用锁和自旋CAS实现原子操作

  1. Java 中的 volatile 关键是什么作用?怎样使用它?在 Java 中它跟 synchronized 方法有什 么不同?

先说一下可见性,所谓的可见性就是指可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量

的值,其他线程能够立即看得到修改的值。

volatile是两条实现原则:

1.Lock前缀指令会引起处理器缓存会写到内存

当对volatile变量进行写操作的时候,JVM会向处理器发送一条lock前缀的指令,将这个缓存中的变量回写到

系统主存中

2.一个处理器的缓存回写到内存会导致其他处理器的缓存失效

处理器使用嗅探技术保证内部缓存系统内存和其他处理器的缓存的数据在总线上保持一致。

8. 用java代码解决生产者——消费者问题