专题一 高性能编程
wandermonde
这个作者很懒,什么都没留下…
展开
-
线程通信
线程通信:线程之间的协同,如线程执行先后顺序、获取某个线程执行的结果等。分为4类; 文件共享 线程1写入某个文件,线程2读取这个文件 网络共享 类似于文件共享 共享变量 线程1写入某个公共变量,线程2读取这个公共变量 JDK提供的线程协调API (1)suspend/resume(Thread类) 已弃用,原因是容易写出死锁的代码。在同步代码块中使用,不释放锁,容易死锁;suspend比res...原创 2020-01-29 14:43:28 · 144 阅读 · 0 评论 -
J.U.C包之Lock接口及其实现
锁的本质 锁是对资源的一种保护和约束,抢锁是获得使用资源的资格。 锁的实现原理: 维护一个状态值,通过CAS操作这个状体值,操作成功得到锁,操作失败进行自旋。如轻量级锁自旋,线程是Runable状态;重量级锁自旋,线程进入entryList,是blocked状态。 Lock接口 lock():获取锁(不死不休) tryLock():获取锁(浅尝则止) tryLock(long time, Time...原创 2020-01-19 21:50:57 · 221 阅读 · 0 评论 -
线程安全之可见性问题
JMM对于同步规则的定义: 对volatile变量v的写入,与所有其他线程后续对v的读同步 对监视器m的解锁,与所有后续操作对于m的加锁同步 理解:后续的加锁操作内容,能够看到解锁前的线程对于共享变量的修改。 对每个属性写入默认值(0,false,null),与每个线程对其进行的操作同步 理解:一个线程创建了有默认值的对象,后面其他线程可能读不到这个对象设置的默认值,但一定会读到初始值,而不会读...原创 2020-01-15 22:53:31 · 129 阅读 · 0 评论 -
线程安全之原子性问题
原子性问题: 1.线程读的某个变量值失效 即t1时刻读的值,在t2时刻已经被其他线程更改 2.某个判断条件失效 即t1时刻判断条件,在t2时刻已经被其他线程更改 解决: 将多个线程按照有序的方式顺序执行 synchronized(互斥锁) ReentrantLock(互斥锁) AtomicInterger等原子类(CAS) CAS: 属于硬件同步原语,处理器提供了基本内存操作的原子性保证 理解...原创 2020-01-15 22:53:21 · 213 阅读 · 0 评论 -
内存屏障和CPU缓存
1.CPU缓存 为了提高程序运行的性能,现代CPU在多方面对程序进行了优化。例如,利用CPU高速缓存,尽可能避免处理器访问主内存的时间开销,以提高性能。 ...原创 2020-01-01 14:39:42 · 204 阅读 · 0 评论 -
线程中止
不正确的方式 Stop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不推荐使用 Destroy:JDK并没有实现该方法 以下代码: package com.study.hc.thread.chapter1.thread; public class StopThread extends Thread { private int i = 0, j = 0; @O...原创 2020-01-01 09:47:30 · 107 阅读 · 0 评论 -
线程状态
1. 线程状态 线程有6个状态,在Java中通过Thread下的一个枚举类Java.lang.Thread.State可以获取,分别是: New:处于新建且还未启动的线程状态 Runnable:线程就绪状态 Blocked:线程阻塞等待监视器锁定的线程状态,一般都处于等待锁状态 Waiting:线程等待状态,需要由其他线程唤醒,如生产者-消费者模型。 常见方法,Object.wait()、Thre...原创 2019-12-30 20:42:34 · 111 阅读 · 0 评论 -
Java程序运行原理分析
1. JVM 简介 java源码被编译器成class字节码,然后由JVM运行的时候进行处理,下面一部分主要是JVM根据不同的操作系统进行的适配。 线程独占:每个线程都会有它独立占据的空间,随线程生命周期而创建和销毁 线程贡献:所有线程都能访问这块内存数据,随虚拟机或者GC创建和销毁 方法区:用来存储加载的类的信息、常量、静态变量、编译后的代码等东西的。方法区在1.7以前把它叫做永久代,1.8之后...原创 2019-12-30 20:17:15 · 202 阅读 · 0 评论