多线程使用场景及其面试题(干货多线程高并发大厂面试集锦)
多线程使用场景及其面试题(干货多线程高并发大厂面试集锦)7. 什么是 ThreadLocal?import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ThreadTest { /** * @param args */ private int j; private Lock lock = new ReentrantLock(); public static void main(String[] args) { // TODO Auto-generated method stub ThreadTest tt = new ThreadTest(); for(int i=0;i<2;i ) { new Thread(tt.new A
在Java面试中,多线程,高并发是常见的考点,为了避免在面试时出现懵逼现状,对于这个知识点,同学们还是要认认真真复习啊~所以,今天,我特意整理了一些大厂常考的关于多线程高并发的知识点,让大家更高效地复习和准备~
话不多说,马上跟大家一起分享!
1. stop() 和 suspend() 方法为何不推荐使用?
2. sleep() 和 wait() 有什么区别?
3. 同步和异步有何异同,在什么情况下分别使用他们?
4. 当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法?
5. 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadTest {
/**
* @param args
*/
private int j;
private Lock lock = new ReentrantLock();
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadTest tt = new ThreadTest();
for(int i=0;i<2;i )
{
new Thread(tt.new Adder()).start();
new Thread(tt.new Subtractor()).start();
}
}
private class Subtractor implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
/*synchronized (ThreadTest.this) {
System.out.println("j--=" j--);
//这里抛异常了,锁能释放吗?
}*/
lock.lock();
try
{
System.out.println("j--=" j--);
}finally
{
lock.unlock();
}
}
}
}
private class Adder implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
/*synchronized (ThreadTest.this) {
System.out.println("j =" j );
}*/
lock.lock();
try
{
System.out.println("j =" j );
}finally
{
lock.unlock();
}
}
}
}
}
6. 概括的解释下线程的几种可用状态。
7. 什么是 ThreadLocal?
8. run() 和 start() 区别
9. 请说出你所知道的线程同步的方法。
10. 线程调度和线程控制。
11. 什么是线程饿死,什么是活锁?
12. 多线程中的忙循环是什么?
13. volatile 变量是什么?volatile 变量和 atomic 变量有什么不同?
14. volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗?
* 声明:资料等作品均来源互联网,版权归该资源的合法拥有者所有,分享的资料仅供读者预览及学习交流使用。禁止商业使用。原作者如果认为本文侵犯了您的版权,请联系本号立即删除!