文章目录
- 11 java 内存模型,线程安全问题和volatile 关键字的作用
- 11 java 原子操作
- 11 volatile为何不保证原子性?
- 11 java并行编程的三大特性,可见性,原子性,有序性
-
- 12 什么是线程安全
- 13 线程安全的级别
- 14 java 如何获取线程dump文件
- 15 一个线程如果出现了运行时异常会怎么样?
- 16 如何在两个线程间共享数据
- 17 sleep 和wait方法的区别
- 18 生产者消费者模型的作用是什么?
- 19 Threadlocal的作用
- 20 为什么 wait方法和notify、notifyAll方法要在同步块中调用?
- 21 wait方法和notify、notifyAll方法在放弃对象监视器时有什么区别
- 22 为什么要使用线程池
- 23 怎么检测一个线程是否持有对象监视器
- 24 synchronize和reentrantlock的区别
- 25 cuoncurrentHashMap的并发度是什么
- 26 ReadWriteLock是什么?
- 27 什么是多线程的上下文切换
- 28 如果提交任务时,线程池队列已满,会发什么什么?
- 29 java的线程调度算法是什么?
- 30 Thread.sleep(0)的作用
- 31 什么是自旋
- 32 什么是CAS
- 33 什么是乐观锁,悲观锁
- 34 简单说下什么是AQS
- 35 semaphore有什么作用
- 36 什么是公平锁,什么是非公平锁,synchronize属于哪种?
- 什么是可重入锁
- 37 synchronized与static synchronized 的区别
- 38 hashtable 的size()方法只有一个return count,为什么还要做同步
- 39 线程类的构造对象,静态代码块被哪个线程调用?
- 40 锁粗化操作
- 41 线程池中的闲置线程是怎么存活等待的?占内存吗?
- 42 高并发,任务执行短的业务怎么设置线程个数?并发不高,任务执行长的业务怎么使用线程池?并发高,执行任务长的业务怎么设置线程个数?
- 43 java 线程池体系介绍
- 44 queen的三种排队策略
- 45 线程池的拒绝策略
- 55 synchronized锁的原理,和可重入原理
- 56 synchronized和reentrantlock的区别
- 57 Reentrantlock锁的可重入性原理是?
- 58 线程池非核心线程的创建时机?
- 59 如何在java线程池中提交线程
- 60 CopyOnWriteArrayList是线程安全的
1,线程和进程的区别
进程是应用程序,线程是进程中的一个执行序列,一个进程可以有多个线程。像java的jvm就是一个进程,里面的thread就是一个个线程。
2,创建线程的几种方式
继承Thread类,实现Runnable接口或callable接口,用Executor创建线程池
Runnable相对更受欢迎一些,因为它是接口,类可以实现多个接口。但只能继承一个。
3,线程的执行的几种状态
1,新建(new),创建一个线程对象
2,可运行状态(runnable):调用start()方法,但不会立即执行,而是在可运行线程池中等待调度运行。
3,运行(running):线程获得了cup的时间片,开始执行代码
4,阻塞(block):线程因某种原因放弃了执行权,让出cpu资源,停止运行。
阻塞又可细分为以下几种:
等待阻塞,线程执行了wait()方法,进入到了等待队列。
同步阻塞,如果线程执行中遇到有同步锁被别的线程持有,则jvm会把该线程放到锁池中。
其他阻塞,线程遇到sleep或join方法,jvm也会把线程置为阻塞状态。
当阻塞结束,就由进入2,可运行状态
5,死亡(dead):线程run(),main