Java 基础知识

时间:2021-09-13 20:01:39   收藏:0   阅读:26

Java

JAVA 的8中数据类型

String

重写和重载

装箱与拆箱

线程的启动方式

run 和 start的区别

Runable

线程的6种状态

一些线程的操作

线程的属性

中断线程

shutdown() 和 shutdownNow()

守护线程

12.4 同步

12.4.3 锁对象
private var bankLock=new ReentrantLock();
fun
 {
   bankLock.lock();
   try{do something}
   finally{banLock.unLock();}
 }
12.4.4 条件对象
 transfor()
 {
    bankLock.lock()
    try
    {
        //注意是while
        while(accounts[from]<amount) sufficientFunds.await();// 不满足条件线程等待 并放弃锁
        sufficientFuns.signalAll();// 通知等待的线程 可能满足条件 值得再次检查
    }
    finally
    {
        bankLock.unlock();
    }
 }
12.4.5 synchronized关键字

锁总结:

synchronized关键字作用:

12.4.8 volatile作用

共享变量只进行赋值操作则可以使用volatile进行同步: 保证变量可见性 防止指令重排序 不保证原子性
volatile关键字为实例字段的同步提供了免锁机制,编译器和虚拟机就知道该字段可能被另外一个线程并发更新
每次都到主存读取,保证变量可见性,防止指令重排序
但其不保证原子性

内存可见性原理

伪共享(false sharing)

线程池

创建线程代价大,线程池可用有效的利用有限的线程来启动任务
意义: 线程池提供了一种限制和管理资源,且维护一些基本统计信息,比如已经完成的任务的数量。
优点:
1、 降低资源消耗: 通过重复利用已经创建的线程 降低线程创建和销毁的消耗
2、 提高响应速度:任务到达时,不需要等到线程创建就能立即执行
3、 提高线程可管理性: 线程池堆线程统一分配 调优 和监控

ThreadPoolExecutor 自定义线程池 7个参数

饱和策略

CountDownLatch 倒计时器 (1初始化cnt; 2conuntDown():cnt--; 3if cnt==0 : 唤醒调用await的方法)

CyclicBarrier 循环栅栏(1初始化parties;2await():parties--;3 if parties==0: 唤醒调用await的方法并执行barrierAction)

Semaphore 信号量

BlockingQueue 阻塞队列
可见性

execute() 与 submit()的区别

锁 lock syn

CAS (Compare and Swap)

hashmap concurrenthashmap 1

concurrenthashmap实现原理:

Hashmap不安全的原因

hashmap 原理

arraylist linkedlist

JAVA对象的创建过程 5步

类加载过程:5个阶段

加载、验证、准备、解析、初始化

类加载器 和 双亲委派

JVM 6种内存

技术分享图片

垃圾回收

判断对象是否可回收

四种引用类型(强 软 弱 虚)

垃圾回收算法

1、标记清除(新生代)

2、标记整理 (新生代)

3、复制 (老年代)

4、 分代收集

七种垃圾回收器

内存分配策略

内存回收策略

NIO

选择器 Selector

while (true) {
    int num = selector.select();// 监听事件
    Set<SelectionKey> keys = selector.selectedKeys();//获取到达的事件
    Iterator<SelectionKey> keyIterator = keys.iterator();
    while (keyIterator.hasNext()) {
        SelectionKey key = keyIterator.next();
        if (key.isAcceptable()) {
            // ...
        } else if (key.isReadable()) {
            // ...
        }
        keyIterator.remove();
    }}

反射

LRU

    // 继承LinkedHashMap
    public class LRUCache<K, V> extends LinkedHashMap<K, V> {
        private final int MAX_CACHE_SIZE;

        public LRUCache(int cacheSize) {
            // 使用构造方法 public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
            // initialCapacity 初始容量、loadFactor 加载因子默认为0.75 数组容量达到当前容量的75%时 进行孔融
            // 默认负载因子(0.75)在时间和空间成本上提供了很好的折衷。较高的值会降低空间开销,但提高查找成本(体现在大多数的HashMap类的操作,包括get和put)
            // accessOrder要设置为true,按访问排序
            super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
            MAX_CACHE_SIZE = cacheSize;
        }

        @Override
        protected boolean removeEldestEntry(Map.Entry eldest) {
            // 超过阈值时返回true,进行LRU淘汰
            return size() > MAX_CACHE_SIZE;
        }

    }

原文:https://www.cnblogs.com/lancelee98/p/15258236.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!