JAVA多线程-juc并发编程?

进程、线程、多线程?

线程创建?

  1. thread,不建议使用,因为是单继承局限性
  2. runable,初学者
  3. callable,高级(demo)
  4. 线程池,高级,注意使用场景

线程五大状态?

  1. 新建->new
  2. 就绪->start,run,call,只能启动一次死亡后就不能再启动了
  3. 运行->cpu调度
  4. 睡眠->sleep
  5. 死亡->正常|异常结束

常用方法?

  • sleep->睡觉
  • join->插队阻塞被插的线程
  • yield->礼让不一定成功没啥用
  • priority->优先级

守护线程?

虚拟机不管守护线程,只管用户线程是否结束

  • gc线程
  • web项目主线程

线程间通讯(demo)?

  1. wait
  2. notify

并发(demo)?

并行?

多个线程同时执行

锁(demo)?分类区别?

  1. ReentrantReadWriteLock->读写锁,写入同步,读取异步
  2. synchronized->关键字
  3. ReentrantLock->公平锁|非公平锁

阻塞队列?

  1. ArrayBlockingQueue->必须设置容量
抛出异常不抛异常阻塞等待超时等待
addofferputoffer
removepoll->nulltakepoll
elementpeek//
  1. SynchronousQueue->不可以设置容量默认是1

生产者和消费者(传统的demo)?

虚假唤醒?

多线程下if判断会造成虚假唤醒,要用while替代

生产者和消费者(juc版demo)?

同步监视器精准唤醒(demo)?

8种锁(demo)?

  1. 谁调用就锁谁
  2. static锁的是类对象

不安全集合和安全集合?

  1. ArrayList->变安全
    1. Vector->简单粗暴,所有的方法加锁
    2. Collections.synchronizedList(new ArrayList<>())->读写删除加锁,且加锁在代码块上,效率较好,遍历未加锁,可以根据实际业务需求,自行决定是否加锁
    3. CopyOnWriteArrayList->读未加锁,写使用CAS自旋锁,先复制原数组,修改复制的数组,之后把复制数组重新复制给原地址(当数组过大时,复制效率极低),并发过多,CAS碰撞过多,也会影响性能,读取数据是原数组,所以如果add方法还未执行到setArray方法,读取的数据就是原来的数据
  2. HashSet(底层是HashMap的key)->变安全
    1. CopyOnWriteArraySet->同上list
    2. Collections.synchronizedSet(new HashSet<>())->同上list
  3. HashMap->变安全
    1. Collections.synchronizedMap(new HashMap<>())
    2. ConcurrentHashMap
  4. xxx

辅助类?

  1. CountDownLatch->减法计数器(demo)
  2. CyclicBarrier->加法计数器(demo)
  3. Semaphore->信号量(demo)

线程池(demo)?

jdk提供的不建议使用,建议自己手动创建(demo)。

  1. corePoolSize-核心线程数
  2. maximumPoolSize-最大线程数
  3. keepAliveTime-(maximumPoolSize-corePoolSize)存活时间
  4. unit-存活时间单位
  5. workQueue-队列
  6. threadFactory-工厂默认不变
  7. handler-拒绝策略4种:当线程数大于(maximumPoolSize+workQueue)触发
    1. AbortPolicy-直接报错
    2. CallerRunsPolicy-交给主线程执行
    3. DiscardOldestPolicy-抛弃旧的
    4. DiscardPolicy-直接抛弃最后的

如何定义最大线程数?

  1. cpu密集型
  2. io密集型

函数式接口编程(demo)?

  1. function
  2. cosumer
  3. supplier
  4. predicat

流式计算?

forkjoin(demo)?工作窃取

大数据处理计算,三种方式处理对比(demo)

异步回调类似于js的Ajax?(completableFuture)研究netty的异步任务

JMM内存模型,volatile关键字?

  1. 保证线程间可见性
  2. 不保证原子性->Unsafe类原子类AtomicInteger原理CAS
  3. 禁止指令重排->内存屏障

单例模式?

彻底搞懂单例模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值