1.什么是进程?
线程就是系统中正在运行的程序,程序一旦运行就是进程,每个进程都有独立的地址空间,一个进程无法访问另一个进程的变量和数据结构,想要访问,需要使用进程通信,比如管道.文件等
2.什么是线程?
线程就是系统能够进行的最小调度单位,他被包含在进程中,一个进程中可以有多个并发的线程,每条线程执行不同的任务.
3.线程实现的方式?
继承Thread类
实现Runnable接口
使用Callable的Future
或者使用线程池
4.Thread的start()方法和run()方法有什么区别?
start方法是启动线程,真正实现了多线程通过调用thread类的start方法来启动一个线程,这是线程就处于就绪状态,并没运行,然后通过run方法来完成线程运行,run方法运行结束,线程终止,cpu调度其他线程
5.线程的状态
6.如何知道代码段被哪个线程带调用
通过获取线程的名称就可以知道了
Thread.currentThread().getName()
7.sleep()方法
是在指定的毫秒数内,让当前的正在执行的线程进入休眠状态
8.yield()方法
放弃当前cpu资源,让给其他任务.
9.线程的优先级
线程的优先级是获取cpu资源比较多,但是不能保证一定优先级高,就先执行
优先级分为1-10个等级,数字越大优先级越高,默认优先级是5,超出优先级范围会抛出异常
优先级是具有继承性的,比如a线程启动b线程,那么b线程和a线程优先级是一样的
设置优先级使用 setPriority(级别)方法
10线程分类?
用户线程
守护线程
11.守护线程的特点?
守护线程用做程序中后台调度支持性工作,比如java中经典的守护线程GC
Thread.setDaemon(true)设置此线程是守护线程
12 join
join就是把指定的线程加入当前的线程
举例子: 比如join线程a 会让当前的线程b进入等待,知道线程a结束生命周期,线程b才会执行
13 synchronized?
java中的关键字,防止线程之间的干扰,如果一个对象时对多个线程可见的,那么对该对象的所有读写操作都将通过同步的方法来进行
用法;
代码块
方法
锁的是什么?
普通方法 锁的是当前类的实例对象
静态同步方法 锁的是当前类的Class对象
同步方法块 锁的是synchronized()括号里面的对象
14.锁的升级
低--高 无锁状态---偏向锁---轻量级锁---重量级锁
15.偏向锁
16.轻量级锁
17 CAS (比较和替换)
CAS实现原子操作的3大问题
1.CAS的ABA问题
2.循环时间长开销大的问题
3.只能保证一个共享变量的原子操作问题
18.volatile关键字
volatile
保证线程间变量的可见性,简单地说就是当线程A对变量X进行了修改后,在线程A后面执行的其他线程能看到变量X的变动
线程对变量进行修改之后,要立刻回写到主内存
线程对变量读取的时候,要从主内存中读,而不是缓存
volatile不能保证原子性
19.wati()
使当前执行代码的线程进行等待,他是object的方法 会将当前线程置入预执行队列中,直到收到通知或中断为止
注意: 待用wait()方法之前,线程获得了锁,待用wait()方法后,线程进入等待状态,会释放锁
20notify
也是object类的方法 也是在同步方法内或者同步代码块内部调用,
等待其他线程执行完他们的指定代码过后 再将其唤醒(notify());在有多个线程进行等待时, 如果需要,可以使用 notifyAll()来唤醒所有的等待线程。
21 ThreadLocal
主要解决每一个线程想要绑定自己的值,存放线程的私有数据
22.lock锁 synchronization不具备的特性
23.Reentrantlock重入锁
重入锁: 任意线程在获取到锁之后能够再次获取锁,而不被阻塞
解决了 1.锁需要去识别获取锁的线程是否是当前占据锁的线程,如果是则再次成功
2.锁的最终释放,线程重复n次获取了锁,随后在第n次释放该锁后,其他线程能够获取到该锁
24 为什么使用线程池
降低资源消耗 重复利用已经创建的线程降低线程创建和销毁造成的资源消耗
提高响应速度 当任务到达时,任务不需要等到线程创建就可以立即执行
提供线程可以管理性 可以通过设置合理分配,调优,监控
25 线程池工作流程
1.判断核心线程池里的线程是否都有在执行任务,
否------创建一个新的工作线程来执行任务
是-------走下一个流程
2.判断工作队列是否已满
否--------新任务存储在这个工作队列
是--------走下一个流程
3.判断线程池里的线程是否都在工作状态
否---------创建一个新的工作线程
是---------走下个流程
4.按照设置的策略来处理无法执行的任务
26.创建线程池的参数有哪些?
27.线程池种类
4\类
newCachedThreadPool(重用性)
newFixedThreadPool(常用 固定线程数量)
newScheduledThreadPool(定期执行)
newSingleThreadExecutor(发生异常重启一个线程)
28.向线程池提交任务
execute()和submit()两种方式提交任务
shutdown()关闭线程池