Java线程基础面试题

1.syn和lock的区别?

1.syn可以写在代码块和方法上和类,而lock只能写在代码块上

2.syn不需要手动释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;lock必须使用unlock方法去释放锁,如果没有释放还会造成死锁

3.通过lock可以找到有没有成功获取到锁,而syn却无法办到

2.什么是死锁?如何避免死锁?

当线程A独占线程a,并尝试独占线程b,线程B独占线程b,并尝试独占线程a,双方都互相持有对方需要的锁,就会造成死锁。

1.尽量减少同步代码块

2.降低使用粒度,不要几个功能使用同一把锁

3.尽量使用 Java.util.concurrent并发类代替自己手动写锁

4.尽量使用trylock的方法,设置超时时间,超出时间时可以退出防止死锁。

3.线程的状态?

  1. 新建(New):当线程对象被创建但尚未启动时处于新建状态。

  2. 可运行(Runnable):线程对象调用了start()方法后,线程处于可运行状态。在可运行状态下,线程可能正在执行,也可能正在等待系统资源(如处理器时间片)。

  3. 运行(Running):线程获得了处理器时间片并正在执行其任务。

  4. 阻塞(Blocked):线程被阻塞并暂时停止执行,通常是因为等待某个操作的完成(如等待I/O操作、等待获取锁、等待某个条件满足等)。

  5. 等待(Waiting):线程等待某个特定条件的发生,需要其他线程显式地唤醒(如通过wait()方法)。

  6. 超时等待(Timed Waiting):线程等待一段特定的时间,超过时间后会自动唤醒。

  7. 终止(Terminated):线程执行完毕或出现异常导致终止,不再可运行。

4.notify和notifyAll的区别。

notifyAll()会唤醒所有线程,而notify只会唤醒一个线程。当notifyAll调用后,会将全部线程由等待池移动到锁池,参与锁的竞争,竞争成功则继续执行,如果不成功则继续留在锁池等待锁被释放后再次参与竞争。而notify()只会唤醒一个线程,具体唤醒哪一个由虚拟机决定。

5.wait和sleep方法区别。

1.wait来自Object类,而sleep来自Thread类

2.wait必须放在同步代码块,sleep可以在任何位置执行

3.wait会释放资源。sleep不会释放资源。

4.wait需要手动唤醒。sleep时间到了会自动唤醒。

6.Thread类中常见的方法

1.start 开启线程

2.yield 暂停当前线程,并执行其他线程。

3.sleep 使当前线程变成阻塞状态

4. jion 保证使用join的线程比其他线程先运行

5.stop 强制结束线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值