线程方面面试问题一

线程安全 线程状态 线程和进程的区别

切入点:请你说一下你对多线程还有线程的理解

线程和进程的区别

说到多线程首先要知道什么是线程,什么进程,进程就是指在系统中正在运行的某个应用程序,只要程序一旦运行那么它就是一个进程。线程:单个进程中执行的每个任务就是一个线程,线程是进程中最小的执行单位,一个进程可以有多个线程,但是一个线程只能属于一个进程。

线程状态

一个线程创建之后都做了什么事呢?当线程被创建并启动后,它不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建 当程序使用new 关键字创建了一个线程之后,该线程就处于新建状态、就绪 当线程对象调用了start(),方法后就变成了就绪状态,等待调度运行、运行 如果处于就绪状态并获得了CPU,开始执行run()方法的线程体 此时状态就变成了运行状态、阻塞 线程因为某种原因放弃了CPU使用权 那么这个线程就会暂时停止运行并进入阻塞状态直到线程进入可运行状态,才有机会再次获得CPU的执行权 、死亡 线程正常结束和异常抛出还有调用stop都会造成线程死亡;这5种状态,尤其是线程启动以后,他不能一直霸占着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次运行、阻塞之间切换。

多线程与线程安全问题

那为什么使用多线程呢,大家都知道众人拾柴火焰高这个道理,如果JAVA程序中用单线程执行任务的话,如果某个方法执行的时间特别长,比如进行递归查询,或者IO读写之类的耗时任务。那么这种情况就可以分配给它一个线程,让他单独去执行,这样不会影响代码的执行效率,别的线程可以继续执行互不干扰,说的直白一点就是多个任务同时开启 然后再同时执行,可以提高资源的利用率。但是在项目中使用多线程的话,需要考虑到多线程可能引起的线程安全问题,线程安全问题是怎么产生的呢:当多个线程共享同一个资源的时候,也可以这么说,当一个线程在执行操作共享数据的多条代码过程中,其他线程参与了运算,就会导致线程安全问题的产生,这样就会造成数据的脏读,这就是线程问题。那么有问题就要解决问题,可以这样想:如果这个共享数据已经有线程在运算了,就不让其他线程进行参与运算,等线程执行完了之后再让别的线程去抢占这个资源。那么怎么实现不让其他线程进程参与运算呢,就可以运用同步代码块或者同步函数,但是这种方法效率低下,而且在多个线程共享多个资源的时候还会产生线程安全问题,这里就要用到Lock锁 Lock锁是一个可以手动控制开关的锁 ,如果这个锁可以手动控制开关的话,那么死锁这个问题就会得到解决。除了Lock锁之外还有乐观锁、悲观锁、自旋锁等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值