
并发编程与多线程
dan_zhoudan
研究生阶段
展开
-
BIO/NIO/AIO 三种IO模式概述
1、BIO(blockio 同步阻塞模式)1. BIO模式问题1.1 阻塞问题服务端在接收客户端套接字请求时,accept() 方法阻塞等待:一直等到有客户端接入时才往下执行。客户端写数据时,阻塞:一直停留在wirte() 这行代码,直到把所有的消息全部写出去,并且服务端接受到消息。1.2 多线程问题服务端接收套接字后,都需要开辟一个线程进行处理,非常消耗服务器的性能。2、NIO(none block io 同步非阻塞模式)buffer缓冲区、channel管道、Sel...原创 2020-09-09 14:29:11 · 882 阅读 · 0 评论 -
深入剖析Java中的锁【原理、锁优化、CAS、AQS】
1、悲观锁与乐观锁广义概念,体现的是看待线程同步的不同角度。悲观锁:悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不会被别的线程修改。锁实现:关键字synchronized、接口Lock(concurrent包下)的实现类使用场景:写操作较多,先加锁可以保证写操作时数据正确。乐观锁:乐观锁认为使用数据时不会有别的线程修改数据,所以不添加锁;只是在更新数据时去判断之前有没有其它线程更新了这个数据。锁实现:CAS算法,例如AtomicInteg原创 2020-08-17 21:52:11 · 224 阅读 · 0 评论 -
Java面试内容精讲 - 并发编程volatile
第一章 volatile关键字概述1.1 多线程下变量的不可见性1.1.1 概述在多线程并发执行下,多个线程修改共享的成员变量,会出现一个线程修改了共享变量的值后,另一个线程不能直接看到该线程修改后的变量的最新值。通过volatile关键字,可以让该变量值可见。package com.dhu.concurrency.volatil.concurrent;/** * 目标:多线程下变量访问的不可见性现象 * 1.定义一个成员变量 * 2.开启两个线程,一个线程负责修改,原创 2020-08-16 17:21:26 · 235 阅读 · 0 评论 -
多线程(二)
一、线程状态1、2、线程方法3、线程停止(1)(2)4、多线程暂停 sleep5、多线程_礼让yield(1)6、多线程_插队 join(1) t.join()写在Main方法中,则main线程被阻塞(2)...原创 2020-06-18 23:04:53 · 130 阅读 · 0 评论 -
多线程(一)
一、概念二、线程创建(1)继承Thread2、实现Runnerable3、对比4、实现Callable5、静态代理6、Lambda表达式(1)静态内部类(2)局部内部类(3)匿名内部类(4)jdk8 使用lamdba来简化需要保证接口只有一个没有实现的方法,用于简化简单的线程类7、案例(1)(2)(3)(4)la...原创 2020-06-18 21:47:53 · 120 阅读 · 0 评论 -
synchronized关键字解析
一、synchronized锁的是类的实例(对象)或者类的字节码加了synchronized不一定能够保证线程安全:看锁住的对象是否唯一。1、synchronized锁的是堆内存的对象2、new Demo() 当作this对象3、刚开始执行时就需要加锁同步,在方法上直接加上synchronized4、synchronized可以锁类的class字节码文件5.6、面试题:同步方法和非同步方法是否可以同时调用?可以7、synchronized支持重入锁原创 2020-08-15 21:34:24 · 155 阅读 · 0 评论