文章目录
-
- JAVA并发知识库
-
- 1、Java中实现多线程有几种方法?
- 2、继承Thread类
- 3、实现Runnable接口。
- 4、ExecutorService、Callable、Future有返回值线程
- 5、基于线程池的方式
- 6、4 种线程池
- 7、如何停止一个正在运行的线程?
- 8、notify()和notifyAll()有什么区别?
- 9、sleep()和wait()有什么区别?
- 10、volatile是什么?可以保证有序性吗?
- 11、Thread类中的start()和run()方法有什么区别?
- 12、为什么wait, notify和notifyAll这些方法不在thread类里面?
- 13、为什么wait和notify方法要在同步块中调用?
- 14、Java中interrupted和isInterruptedd方法的区别?
- 15、Java中synchronized和ReentrantLock有什么不同?
- 16、有三个线程T1,T2,T3,如何保证顺序执行?
- 17、SynchronizedMap和ConcurrentHashMap有什么区别?
- 18、什么是线程安全?
- 19、Thread类中的yield方法有什么作用?
- 20、Java线程池中submit()和execute()方法有什么区别?
- 21、说一说自己对于synchronized关键字的了解。
- 22、说说自己是怎么使用synchronized关键字,在项目中用到了吗?synchronized关键字最主要的三种使用方式
- 23、什么是线程安全?Vector是一个线程安全类吗?
- 24、volatile关键字的作用?
- 25、简述一下你对线程池的理解。
- 26、线程生命周期(状态)
- 27、新建状态(NEW)
- 28、就绪状态(RUNNABLE)
- 29、运行状态(RUNNING)
- 30、阻塞状态(BLOCKED)
- 31、线程死亡(DEAD)
- 32、终止线程4种方式
- 33、start与run区别
- 34、JAVA后台线程
- 35、什么是乐观锁?
- 36、什么是悲观锁?
- 37、什么是自旋锁?
- 38、Synchronized同步锁
- 39、ReentrantLock
- 40、Condition类和Object类锁方法区别区别?
- 41、tryLock和lock和lockInterruptibly的区别?
- 42、Semaphore信号量
- 43、Semaphore与ReentrantLock区别?
- 44、可重入锁(递归锁)
- 45、公平锁与非公平锁
- 46、ReadWriteLock读写锁
- 47、共享锁和独占锁
- 48、重量级锁(Mutex Lock)
- 49、轻量级锁
- 50、偏向锁
- 51、分段锁
- 52、锁优化
- 53、线程基本方法
- 54、线程等待(wait)
- 55、线程睡眠(sleep)
- 56、线程让步(yield)
- 57、线程中断(interrupt)
- 58、Join等待其他线程终止
- 59、为什么要用join()方法?
- 60、线程唤醒(notify)
- 61、线程其他方法
- 62、进程
- 63、上下文
- 64、寄存器
- 65、程序计数器
- 66、PCB-“切换桢”
- 67、上下文切换的活动
- 68、引起线程上下文切换的原因?
- 69、同步锁
- 70、死锁
- 71、线程池原理
- 72、线程复
- 73、线程池的组成
- 74、拒绝策略
- 75、Java线程池工作过程
- 76、JAVA阻塞队列原理
- 77、Java中的阻塞队列
- 78、ArrayBlockingQueue(公平、非公平)
- 79、LinkedBlockingQueue(两个独立锁提高并发)
- 80、PriorityBlockingQueue(compareTo 排序实现优先)
- 81、DelayQueue(缓存失效、定时任务 )
- 82、SynchronousQueue(不存储数据、可用于传递数据)
- 83、LinkedTransferQueue
- 84、LinkedBlockingDeque
- 85、在 java中守护线程和本地线程区别
- 86、线程与进程的区别?
- 87、什么是多线程中的上下文切换?
- 88、死锁与活锁的区别,死锁与饥饿的区别?
- 89、Java 中用到的线程调度算法是什么?
- 90、什么是线程组,为什么在Java中不推荐使用?
- 91、为什么使用Executor框架?
- 93、如何在Windows和Linux上查找哪个线程使用的CPU时间最长?
- 94、什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?
- 95、Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它有什么优势?
- 96、什么是Executors框架?
- 97、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
- 98、什么是Callable和Future?
- 99、什么是FutureTask?使用ExecutorService启动任务。
- 100、什么是并发容器的实现?
- 101、多线程同步和互斥有几种实现方法,都是什么?
- 102、什么是竞争条件?你怎样发现和解决竞争?
- 103、为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
- 104、Java中你怎样唤醒一个阻塞的线程?
- 105、在Java中CycliBarriar和CountdownLatch 有什么区别?
- 106、什么是不可变对象,它对写并发应用有什么帮助?
- 107、Java中用到的线程调度算法是什么?
- 108、什么是线程组,为什么在Java中不推荐使用?
- 总结
最近面试的小伙伴很多,对此我整理了一份Java面试题手册:基础知识、JavaOOP、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、数据结构、算法、Elasticsearch、Kafka、微服务、Linux等等。可以分享给大家学习。【持续更新中】
完整版Java面试题地址:【2021最新版】Java面试真题汇总
JAVA并发知识库
1、Java中实现多线程有几种方法?
2、继承Thread类
答:
Thread 类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。 启动线程的唯一方法就是通过Thread类的start()实例方法。 start()方法是一个native方法,它将启动一个新线程,并执行run()方法。
public class MyThread extends Thread {
public void run() {
System.out.println("MyThread.run()");
}
}
MyThread myThread1 = new MyThread();
myThread1.start();
3、实现Runnable接口。
答:
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口。
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");