面试被问到死锁,赶紧背这几条!
meituan到店事业群平台技术部,秋招火热进行中!
内推方式一:
点击图片链接,查看内推二维码,扫码投简历 https://www.cnblogs.com/CATHY-MU/p/15102097.html
内推方式二:
登陆meituan招聘官网( https://campus.meituan.com/),选择岗位投递简历,在内推码输入框中填写内推码( OYkaHKQ)
点击图片链接,查看内推二维码,扫码投简历 https://www.cnblogs.com/CATHY-MU/p/15102097.html
内推方式二:
登陆meituan招聘官网( https://campus.meituan.com/),选择岗位投递简历,在内推码输入框中填写内推码( OYkaHKQ)
平台技术部校招咨询qq群 821133476,入群第一时间获知校招岗位开放信息,第一时间获知补录岗位开放信息,快人一步!
牛客网咨询联系这位=》 https://www.nowcoder.com/profile/8998235 ,我不负责咨询哦
其他文章:
面试被问到.class文件结构,赶紧背这几条!
https://www.nowcoder.com/discuss/684230?source_id=profile_create_nctrack&channel=-1
面试被问到jdk监控工具,赶紧背这几条!
https://www.nowcoder.com/discuss/685100?source_id=profile_create_nctrack&channel=-1
面试被问到操作系统,赶紧背这几条!
https://www.nowcoder.com/discuss/686243?source_id=profile_create_nctrack&channel=-1
面试被问到垃圾回收,赶紧背这几条!
牛客网咨询联系这位=》 https://www.nowcoder.com/profile/8998235 ,我不负责咨询哦
面试被问到.class文件结构,赶紧背这几条!
https://www.nowcoder.com/discuss/684230?source_id=profile_create_nctrack&channel=-1
面试被问到jdk监控工具,赶紧背这几条!
https://www.nowcoder.com/discuss/685100?source_id=profile_create_nctrack&channel=-1
面试被问到操作系统,赶紧背这几条!
https://www.nowcoder.com/discuss/686243?source_id=profile_create_nctrack&channel=-1
面试被问到垃圾回收,赶紧背这几条!
面试被问到散列表,赶紧背这几条!
面试被问到内存管理,赶紧背这几条! 面试被问到arraylist,赶紧背这几条!
面试被问到hashmap,赶紧背这几条!
面试被问到linkedhashmap,赶紧背这几条!
面试被问到 concurrent hashmap,赶紧背这几条!
面试被问到对象的创建过程,赶紧背 这几条!
面试被问到多线程,赶紧背这几条!
线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源。
public class Demo{ private static Object resource1 = new Object(); private static Object resource2 = new Object(); public static void main(String[] args){ new Tread( ()->{ synchronized (resource1){ //do something try{ Thread.sleep(1000);//为了让线程2得到执行 }catch(Exception e){ //do something } synchronized(resource2){ //do something } } },"线程1" ).start(); new Tread( ()->{ synchronized (resource2){ //do something try{ Thread.sleep(1000);//为了让线程1得到执行 }catch(Exception e){ //do something } synchronized(resource2){ //do something } } },"线程2" ).start(); } }
死锁四个条件
1.互斥:资源只能由一个线程持有
2.保持:阻塞时,保持持有已有资源
3.不剥夺:没有权利剥夺其他线程持有的资源,只能资源释放
4.循环:若干线程之间形成头尾相接的循环等待
如何预防死锁
1.破坏保持:一次性申请所有资源
2.破坏不剥夺:
3.破坏循环:按序申请资源
//将线程2的代码改成这样,按资源1 资源2的顺序获取,就不会死锁了 new Thread(() -> { synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource2"); synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); } } }, "线程 2").start();
sleep和wait的区别
sleep 不释放锁,自动苏醒
wait 释放锁,需要等别的线程调用notify 或notifyall,或者用wait(时间)
调start时会自动调run,为什么不能直接调run
new一个新线程,线程进入新建状态,调用start方***启动一个线程并使线程进入就绪状态,分配到时间片就可以运行了,start会执行线程的准备工作,然后自动执行run方法的内容。
直接调run方法,只是执行了呀一个普通方法,没有在某个线程中执行他,不是多线程工作。