多线程相关问题
Posted Java学习基地Java毕设定制
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关问题相关的知识,希望对你有一定的参考价值。
什么是线程?
线程是操作系统能够进行运算调度的最小单位,它包含在进程之中,是进程中的实际运作单位
线程和进程之间的区别:
一个进程包含多个线程,线程是进程的子集,每条线程执行不同的任务,不同的进程使用的是不同的内存空间,而所有线程共享一片内存空间.
实现线程的方式有什么:
1.继承Thread类,重写run方法.
2.实现Runable接口,重写run方法,一般来说都说通过实现Runable接口来创建线程的,因为Java语言只能继承一个类,所以实现Runable方法就更加灵活.
3.通过实现Callable接口和Future Task创建线程.
4.通过线程池创建线程.
线程池的创建方式有4中分别是:
1.newCachedThreadPool:这是一个可缓存的线程池.
2.newFixedThreadPool:创建一个定长的连接池,可以控制线程的最大并发度,超出的线程会在队列中等待.
3.newScheduledThreadPool:创建一个定长的连接池,支持定时和周期性人物执行
4.newSingleThreadPool:创建一个单线程的连接池,保证所有的线程按照指定的顺序执行.
线程中run方法和start方法有什么区别:
Thread.start方法是启动该线程
Thread.run方法是当该线程得到CPU的资源的时候,有JVM调度执行run方法.
线程的生命周期
1.新建状态:
2.就绪状态:
3.执行状态:
4.阻塞状态:
5.死亡状态:
对线程的管理方法有哪些?
1.sleep方法:线程睡眠:使用后会使得线程进入阻塞状态.
2.线程让步yield:和sleep差不多,但是使用后会让线程进入就绪状态,而不是阻塞状态.
3.线程合并join:把几个线程合并成一个线程,通常的使用场景是某一线程必须在某一线程执行完以后才能执行.
4.设置线程的优先级:Thread提供了设置优先级的方法setPriority和getPriority来设置和得到优先级.
5.守护线程:一般用的较少,像jvm垃圾回收和内存管理就是守护线程
6.正确的停止线程.
线程同步的方法:
1.使用同步方法
2.同步代码代
3.同步锁:Lock
4.使用特殊的变量:volitile.这个变量就是要告诉jvm虚拟机,这个变量可能会被其他的线程修改,如果要使用的时候,不是拿到寄存器中的值,而是要重新计算.
什么是死锁:
比如说:一个线程A中有资源A,一个线程B中有资源B,A的下一步要使用资源B,而B的下一步要使用资源A,所有他们就会互相等待资源的释放来使用,这样就会造成死锁的问题.
处理死锁的方法有什么:
1.忽略他们
2.检测死锁并恢复
3.资源进行重新分配
volitile和synchronize的区别:
volitile的实质就是告诉JVM该变量在寄存器中的值是不确定的,当时用这个值得时候不能从寄存器中拿,而需要从主存中拿,而synchronize的作用是锁住该变量,只有当前的线程可以使用,其他使用该变量的线程进入阻塞状态.
sleep和wait的区别:
sleep是使线程进入等待状态,没有释放CPU的资源,没有释放锁.
wait是使线程进入等待池中,释放CPU的资源,释放锁.
sleep设置睡眠时间
wait需要唤醒,notify()方法唤醒.
以上是关于多线程相关问题的主要内容,如果未能解决你的问题,请参考以下文章