多线程篇 概念混淆面试常考问题

本文详细解析了Java多线程开发中的关键概念,包括Runnable与Thread的区别、Run与Start的不同作用、Wait与Sleep的功能差异、Notify与NotifyAll的工作原理,以及Synchronized与Lock的特性对比。

面试中遇到的一些容易概念混淆,拿来比较的问题,总结下来和大家分享,我也是新手被虐很惨,有说的不对的还请大家见谅,各位加油!!!!

1Runnable Thread区别

   Runable 接口,避免单继承,可以实现资源共享

   Thread类实现了runable接口,start方法

2Run与start区别

   使用run不能达到多线程交互的效果,线程还是会顺序运行。

  Start方法可以达到多线程抢占CPU的效果,因为不同操作系统CPU调度不同,所以start中使用 private native void start0() 调用系统底层去抢占CPU资源。

3:Wait 与Sleep区别

   Wait 等待notify唤醒,释放资源

   Sleep休眠 不释放资源锁

4:nofity与notifyall区别

notify从等待该对象的线程中唤醒一个线程

notigyall 从等待该对象的线程中唤醒全部线程,再让他们相互竞争锁,没得到锁的继续wait

5:Synchronized与 lock 区别

Synchronized jvm实现会释放资源,性能低。

lock 代码实现,自己finally释放资源,性能高。

1:上锁锁的永远是一个对象。

2Synchronized 锁一个对象时其他的线程不能调用该线程Synchronized 修饰的方法,属性。可以调用非Synchronized 修饰的属性。

3Synchronized 修饰属性对象

4:外部修饰方法,锁住的是调用此方法的实例,内部代码块Synchronized(this)

class A{

public Synchronized void func(){};

public void funcB(){Synchronized(this)}

}

A a = newA();

a.func();

给a上锁等价于a.funB(); 

5:修饰静态方法,锁类,不是实例

class A{

private Synchronized  static Person p = new Person();

}

给A上锁 等价于Synchronized (A.class);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值