如何学习java

带着问题去学?

为什么我们debug的时候代码会停在哪一个位置

什么是多态?(这个在类的生命周期里面寻找答案)

我们学习java

就是 从代码到成为程序的过程

所以这很明显就是我们的编译原理
和os 打交道这很明白就是 操作系统
和另一台机器打交道,那么就是计算机网络

java 指令 8个

从代码到程序
就是从 代码到字节码(javap 命令可以看到),到机器码到01
这样就串起来了

java JMM

这个可以对应到硬件的内存来学习,2013年摩尔定律失效

先分大类,共享和隔离

一个是共享,----堆和方法区
其余的都是隔离的

需要了解棧帧
本地方法区
程序计数器

内存模型的学习,就是我们所写的类,方法,类变量,成员变量,循环,锁等的实际的映射

以前我们学习面向对象只要到new 就ok 了,现在我们要会多种的new ,反射 ,clone 等,
这里面要学习类的加载机制

现在我们还要学习,对象这个东西,包括对象头啊,锁就在对象头里面
这里面的锁标记为,然后决定了四种锁,这个就是在1.6以后

因为摩尔定律的失效

所以有了JUC ,当然这个因果链,还是比较长的
JUC 只是 java一个并发的工具包,所以在util 里面
,这样也不用死记硬背

多线程

可见性,就是我们所说的viloatie 关键字 和sync 关键字
原子
顺序
其中顺序,有指令重排和h -B 原则

unsafe 这个里面封装了底层的CAS

原子性指令

锁的底层

其实就是操作指令mutex

JUC 里面

有两个主要的包 原子 一些原子的并发工具
一个是lock,这个就比较重要了,首先就是大名鼎鼎的AQS ,我们这些小卡拉米经常不碰,但是经常面试到的一个重点

AQS

三个重点,一个是通用的加锁和释放的方法,一个就是状态值,一个就是一个队列

这和去火车站买票一样,排队是有序快速的一个方案,当然异步预定,也是

学完了AQS 就是同级目录、里面的可重入锁了,它的基础实现有一个公平锁,一个非公平锁,就是主要是是否排队

学完了可重入锁,下来就是一些同步工具

学完同步工具 当然还有同步的集合

还有线程池这个good thing

两个重要的点,一个手机节约资源,一个是统一管理

它的核心参数,主要是服务于主要的工作流程

还有一个worker

对于异步(这个其实是io密集型的一个重点)

计算密集型,就用线程来解决

Java 的中断机制

有JDK 提供的,有线程提供的,有基于时间的

锁的使用场景

三、锁场景

多线程锁是一种用于在多线程编程中保护共享资源的同步机制。以下是一些适合使用多线程锁的场景:

数据库访问:多个线程同时访问数据库可能导致数据一致性问题,使用锁可以保证数据的完整性和正确性。

文件读写:多个线程同时读写同一个文件可能会导致文件损坏或者数据丢失,使用锁可以保证文件的完整性和正确性。

共享内存:多个线程访问同一块共享内存时,使用锁可以保证每个线程都能正确读取或写入共享内存的数据。

队列操作:多个线程同时对队列进行操作可能会导致数据错乱或者数据丢失,使用锁可以保证队列的操作顺序和数据的正确性。

网络通信:多个线程同时进行网络通信时,使用锁可以保证数据传输的完整性和正确性。

需要注意的是,多线程锁并不是万能的,过多的锁使用会降低程序的性能。因此,在使用锁的时候应该注意权衡锁的粒度和性能的需求。

序号 锁名称 应用
1 乐观锁 CAS
2 悲观锁 synchronized、vector、hashtable
3 自旋锁 CAS
4 可重入锁 synchronized、Reentrantlock、Lock
5 读写锁 ReentrantReadWriteLock,CopyOnWriteArrayList、CopyOnWriteArraySet
6 公平锁 Reentrantlock(true)
7 非公平锁 synchronized、reentrantlock(false)
8 共享锁 ReentrantReadWriteLock中读锁
9 独占锁 synchronized、vector、hashtable、ReentrantReadWriteLock中写锁
10 重量级锁 synchronized
11 轻量级锁 锁优化技术
12 偏向锁 锁优化技术
13 分段锁 concurrentHashMap
14 互斥锁 synchronized
15 同步锁 synchronized
16 死锁 相互请求对方的资源
17 锁粗化 锁优化技术
18 锁消除 锁优化技术

21种锁

你可能感兴趣的:(学习,java,开发语言)