JAVA 快速复习知识

262 阅读3分钟

1. java基础

1.1 j ava8 新特性

1.1.1 Lamda表达式

函数式接口有且仅有一个抽象方法的接口

1.2 java容器

2.java jvm

1 java运行时内存:
	a)线程公用内存:方法区(no-heap)、堆(heap)
	b)线程私有内存:虚拟机栈、本地方法栈、程序计数器

	内存区的异常:stack over flow \ out of memory
2.对象头:1.mark(GC、class pointer、age、lock )
  对象体:
  对齐占位
	

3.java多线程

3.1 线程和进程

3.1.1线程的创建

线程:CPU调度的最小单位。 进程:一个进程至少含有一个线程。



线程的状态:START RUNABLE(ready&&running)WAIT(&&) BLOCKING teminal
 create a Thread in java : 1.Thread.
							2.Runable. 
							3.Callable.
							4.ThreadPool.

Runable 拓展性更强、数据跟操作分离。
Callable 有返回值
ThreadPool 线程池,不需要反复创建和销毁。


	
3.1.2线程的生命周期

线程生命周期

  1. START
  2. RUNABLE(Ready&&Running)
  3. WAIT
  4. BLOCKING
  5. TEMINAL

线程方法

  • thread.start();

  • 启动线程,线程进入ready状态,获取CPU时间片后进入Running状态

  • thread.sleep();

  • thread.yield();

    • 当前线程让出CPU时间片,进入ready状态。
  • thread.interupted();

    • 当前线程并不会中断,如果被 interupted属性赋值为true;
  • thread.stop();

  • 不建议使用,属于不安全方法。可以理解为拔掉一台正在执行作业的计算机的电源。

wait && sleep:都会让线程处于watting状态

waitsleep
对象ObjectThread
通讯线程间通讯线程独有
结束方式其他线程唤醒,或限时等待结束等待睡眠时间结束
持有锁释放锁持有锁(可能造成死锁)
异常不需要捕获异常需要捕获异常
调用位置thead方法体中任意位置

3.2 内置锁(外置锁)

3.2.1 synconized

synconized代码块 。

类锁:作用于static 方法。只有一份。

3.2.2 锁粒度
  • 无锁
    • 当没有线程进去边界代码区域时,对象处于无锁状态。
  • 偏向锁
    • 当有一个线程进去时,锁升级为偏向锁,当有第二个线程加入,出现竞态时,锁会偏向之前持有过锁的线程。
    • (可以理解为:做生意的人更愿意和熟人合作,因为你已经有过成功案例,相信这次给到也有能力完成)
  • 轻量锁(CAS)
    • 对象处于偏向锁状态时,有更多的线程的线程加入时,锁升级为轻量锁。大家共同竞争,锁不在偏向于谁。
    • 适应性自旋:线程不会无限制的自旋等待,而是根据线程上次的成功的时间等待。
  • 重量锁(独占锁)。
    • 线程不在自旋等待,而是一次只有一个线程访问。monitor

锁升级是不可逆的。

解锁方式:边界区代码执行完毕、或者代码内发生异常会释放。自动解锁。

3.3 外置锁

乐观锁&&悲观锁

乐观锁:乐观的认为每次修改边界区的时候

乐观锁本质上不是锁,是利用CAS原语的原子性和volite的可见性,在多线程在操作同一个变量时,只有一个线程能够修改成功。

缺点:当线程过多时候,大量线程做自旋等待,消耗CPU性能。

​ ABA问题:本质是线程不可见,线程操作的都是变量的副本

独占锁&&非独占锁

可重入锁&&不可重入锁

公平锁&&非公平锁

读锁&写锁&读写锁

死锁&&死锁解决及避免

3.4 线程工具类

3.5 AQS

3.6 ThreadLocal

3.7 多线程容器


4.Mysql + Mybatis

5.Spring全家桶(Sping )

6.SSM框架 /springcloud / Doubbo+ZooKeeper

7.mq消息队列

8.redis

9.linux基本操作(运维)

10.javaScript + vue + node.js

11.Android native / h5 . flutter

12.设计模式