首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
铁骑
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
0
文章 0
沸点 0
赞
0
返回
|
搜索文章
最新
热门
1.2.3 线程安全之java锁相关
自旋锁:为了不放弃CPU执行事件,循环的使用CAS技术对数据尝试进行更新,直至成功。 自旋锁实际是乐观锁的一种实现,假定一开始不会发生冲突,从内存加载数据,然后对数据修改的操作时将内存中数据与加载的数据进行比较,如果发生了变化就会一直占用CPU,不停的重新加载内存中的新数据,然…
1.2.2 线程安全之原子操作
原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。 将整个操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。 有兴趣的童鞋可以了解下Unsafe的源码,类似于直接操作内存的方法。JVM调用系统…
1.2.1 线程安全之可见性问题
从内存结构到内存模型的原理,来分析排查导致的原因。 JVM内存分为工作内存(线程独享的内存,保存在cpu高速缓存),和主内存(java堆,保存java对象实例的)。 多核情况下,不同CPU中运行的线程是直接与对应的CPU缓存交互数据的,极有可能与主内存的数据在极短时间内不一致。…
1.1.7 线程池原理
线程在java中是一个对象,更是操作系统的资源,线程创建、销毁需要时间。如果创建时间+销毁时间>执行任务时间 就很不合算。 java对象占用堆内存,操作系统线程占用系统内存,根据jvm规范,一个线程默认最大栈大小1M,这个栈空间是需要从系统内存中分配的。线程过多,会消耗很多的内…
1.1.6 线程封闭
多线程访问共享可变数据时,涉及到线程间数据同步的问题。并不是所有时候,都要用到共享数据,所以线程封闭概念就提出来了。 数据都被封闭再各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的技术称为线程封闭。 线程封闭具体的体现有:ThreadLocal、局部变量…
1.1.5 线程通信
要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。 JDK中对于需要多线程协作完成某一任务的场景,提供了对应API支持。 多线程协作的典型场景是:生产者 - 消费者模式。(线程阻塞、线程唤醒) 示例:线程1去买包子,没有包子,则不再执行。线程-2生产…
1.1.4 CPU缓存和内存屏障
为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。 例如:CPU高速缓存。尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。 L1 Cache:是CPU第一层高速缓存,分为数据缓存和指令缓存。一般服务器CPU的L1缓存的容量通常在…
1.1.3 线程中止
Stop:终止线程,并且清楚监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。 Destroy:JDK未实现该方法。 如果目标线程在调用 Object class 的 wait()、wait(long) 或 wait(long,int) 方法、join()、join(l…
1.1.2 线程状态
New:尚未启动的线程的线程状态。 Runnable:可运行线程的线程状态,等待CPU调度。 Blocked:线程阻塞等待监视器锁定的线程状态。 处于synchronized同步代码块或方法中被阻塞。 Waiting:等待线程的线程状态。下列不带超时的方式: Timed Wai…
1.1.1 java基础
线程共享部分:所有线程都能访问这块内存数据,随虚拟机或GC而创建和销毁。 JVM用来存储加载的类信息、常量、静态变量、编译后的代码等数据。 虚拟机规范中这是一个逻辑区划。具体实现根据不同虚拟机来实现。 JVM启动时创建,存放对象的实例。 垃圾回收器主要就是管理堆内存。如果满了,…
下一页
个人成就
文章被点赞
1
文章被阅读
3,228
掘力值
97
关注了
0
关注者
0
收藏集
0
关注标签
10
加入于
2019-09-18