1:blocked线程和waiting的线程的区别? 如何唤醒?
java线程中含有waiting与blocked两种状态:
线程的 blocked状态往往是无法进入同步方法/代码块来完成的。这是因为无法获取到与同步方法/代码块相关联的锁。
2: 为甚cocurrentMap效率高?
3: 原子类和synchronized 那个快
4 java lock底层实现
5 多线程包
6 correntHashmap原理
7 lock synchronized
8 同步方法 VS 同步代码块:
java中,每一个对象都有一把锁,线程用synchronized获取对象上的锁。
非静态同步方法:锁是类的对象的锁。
静态同步方法:锁的是类本身。
同步方法块:锁是可以选择的。所以能更加精确的控制。粒度更细致,可以更精确的控制对象锁。
9 确保N个线程可以访问N个资源而不死锁?
指定资源获取顺序。所有线程都按照同样的顺序请求资源。
10 创建线程的方法:
继承Thread
实现Runnable接口:这种方式更受欢迎,因为可以继承其他的类。
Executor框架创建线程池
11 线程的几种可用状态:
new:刚创建的线程,但是没有调用start。
就绪(Runnable):调用start, run()方法就执行,但是不一定马上执行。等待时间片。
运行(Running) :得到CPU可以执行,正在执行。
阻塞(waitting):正在运行到线程,暂时让出CPU。各种原因可以导致阻塞:
sleep():调用一个在I/O上被阻塞的操作,即该操作在输入/输出完成前不会返回到调用者。
等待锁。
死亡:run() 方法正常退出,自然死亡。未捕获到异常终止了run方法而使线程猝死。