首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
Java
订阅
我不是菜包
更多收藏集
微信扫码分享
微信
新浪微博
QQ
42篇文章 · 0订阅
重识Java动态代理(一)被忽略的场景
一种代理模式,可以在实际调用方法前、后增加公共方法调用,例如记录日志,用户鉴权。 从一些应用场景来看,代理可做的事情也可以通过AOP实现,所以暂时我们还用不到动态代理。 左图的代理类实现了接口类,并持有实现类的实例,在调用实现类的方法前、后可以调用代理类的方法,实现类的方法最终…
Java并发编程(一)知识地图
Java极客 | 作者 / 铿然一叶这是Java极客的第 29 篇原创文章一、知识地图Java并发编程知识地图如下:相关阅读:Java并发编程(二)原子性Java并发编程(三)可见性Java并
Java并发编程(二)原子性
答案:以上两个类在并发情况下均不能保证线程安全。 线程安全:当多个线程访问某个类时,这类始终都能表现出正确的行为,那么这个类是线程安全的。 原子性:一个或者多个操作在CPU执行的过程中不被中断的特性称为原子性。 而以上两个类不能保证操作原子性导致不能表现正确的行为,因此都不是线…
Java并发编程(三)可见性
多核主机上每个CPU都有自己的缓存,在操作内存变量时需要先从内存加载到CPU缓存,操作完成后再从CPU缓存更新到内存,如果多个线程同时在不同的CPU上操作,那么看到的数据就有可能不一样。如图: T1两个线程都从内存读取到变量V。 T2线程A修改了变量V,但还未同步到内存中,此时…
Java并发编程(四)有序性
在计算机执行指令的顺序在经过程序编译器编译之后形成的指令序列,一般而言,这个指令序列是会输出确定的结果;以确保每一次的执行都有确定的结果。但是,一般情况下,CPU和编译器为了提升程序执行的效率,会按照一定的规则允许进行指令优化,在某些情况下,这种优化会带来一些执行的逻辑问题,主…
Java并发编程(五)创建线程方式概览
以下简述创建线程的几种方式,不深入展开,了解则可。 业务类继承Thread,可直接以线程方式运行。代码如下: 业务类可以实现Callable接口或者Runnable接口,二者的区别是Callable执行完后有返回值,Runnable没有返回值。 业务类可以实现Callable接…
Java并发编程入门(六)synchronized用法
1.synchronized加锁互斥且阻塞的,如果A已经获得锁,则B要等A执行完后才能执行。 2.锁定的对象如果不是同一个则不会阻塞,例如在同一个类的静态方法和实例方法上都有synchronized关键字,但它们不是同一个锁,因此互不影响。 3.锁定的对象必须是不变的,否则锁会…
Java并发编程入门(七)轻松理解wait和notify以及使用场景
从日志可以看出,生成的任务数和线程被调用次数是相等的。 1.wait操作将调用线程放入wait队列中,等待唤醒。这里的调用线程不是TaskQueue,而是调用了removeTask()方法的Consumer。 2.wait队列归属一个对象,这里是this,而this是TaskQ…
Java并发编程入门(八)线程生命周期
1.线程创建后状态为NEW 2.线程启动后状态从NEW变为RUNNABLE 3.线程调用同步代码块未获得同步锁时状态为BLOCK,如果获取到锁则状态为RUNNABLE 4.线程运行结束后状态为TERM
Java并发编程入门(九)死锁和死锁定位
死锁:一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。 4.循环等待,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源,就是循环等待。 这四个条件同时满足时,才会发生死锁,因此避免死锁只要打破其中一个条件则可。 1.对于互斥这个条件无法破坏,因为使用锁为…