摘要: 一、什么是BIO BIO是传统的通信技术,在BIO通信模型中,客户端发送请求给服务器,服务器每次都是会单独创建一个线程来监控客户端的请求,会为每个客户端创建一个线程来处理请求。当前服务器处理完成后,通过原来的输出流返回处理结果给到客户端。如图: 二、JDK实现BIO的案例 按照上面的图,我们知道至少 阅读全文
posted @ 2019-11-05 16:00 想去天空的猫 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 一、锁的内存语义 所为的java内存模型的内存语义指的就是在JVM中的实现原则。 锁的内存语义:锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 我们把上面这句话再整理下: 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。 当线程获取锁时,JMM 阅读全文
posted @ 2019-11-03 16:12 想去天空的猫 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 一、happns-before happns-before是学习指令重排序前的一个必须了解的知识点,他的作用主要是就是用来判断代码的执行顺序。 1.定义 happens-before是用来指定两个操作之间的执行顺序。提供跨线程的内存可见性。 在java内存模型中,如果一个操作执行的结果需要对另一个操 阅读全文
posted @ 2019-11-02 15:05 想去天空的猫 阅读(1365) 评论(0) 推荐(0) 编辑
摘要: 一、新增原子类LongAdder LongAdder是JDK8中AtomicLong的增强工具类,它与AtomicLong最大的不同就是:在多线程场景下,LongAdder中对单一的变量进行拆分成多个变量,这些变量分为两类base和Cell。base是基础值,默认一般为0;而Cell就是我们所拆分的 阅读全文
posted @ 2019-10-28 15:05 想去天空的猫 阅读(1399) 评论(0) 推荐(0) 编辑
摘要: public void getH5(HttpServletResponse response){ StringBuffer res=new StringBuffer(); res.append("<!Doctype html>"); res.append("<html lang='zh-cn'>") 阅读全文
posted @ 2019-10-24 17:16 想去天空的猫 阅读(3196) 评论(0) 推荐(0) 编辑
摘要: 一、ThreadLocal ThreadLocal类用于隔离多线程中使用的对象,为ThreadLocal类中传递的泛型就是要隔离的对象,简单的来说:如果我们在主线程创建了一个对象,并且需要给下面的多线程任务都传递这个对象,那么如果这个对象传递到ThreadLocal,那么每个线程获取的对象都是独立的 阅读全文
posted @ 2019-09-25 16:23 想去天空的猫 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 一、等待通知机制wait()与notify() 在线程中除了线程同步机制外,还有一个最重要的机制就是线程之间的协调任务。比如说最常见的生产者与消费者模式,很明显如果要实现这个模式,我们需要创建两个线程,一个生产者,一个消费者;有两个线程还不够,如果当生产者生产商品完成后,消费者如何知道要去消费生产的 阅读全文
posted @ 2019-09-24 15:44 想去天空的猫 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 一、公平锁与非公平锁 线程所谓的公平,就是指的是线程是否按照锁的申请顺序来获取锁,如果是遵守顺序来获取,这就是个公平锁,反之为非公平锁。 非公平锁的优点在于吞吐量大,但是由于其不是遵循申请锁的顺序来获取锁,就会出现最开始申请的锁一直没有获取到,导致出现饥饿现象。 java中的使用: synchron 阅读全文
posted @ 2019-09-23 19:24 想去天空的猫 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 在了解JDK提供的线程原子性操作工具类之前,我们应该先知道什么是原子性:在多线程并发的条件下,对于变量的操作是线程安全的,不会受到其他线程的干扰。接下来我们就学习JDK中线程的原子性操作。 一、CAS原理 说道原子性,不得不提的就是CAS原理: 使用锁时,线程获取锁是一种悲观锁策略,即假设每一次执行 阅读全文
posted @ 2019-09-18 15:54 想去天空的猫 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 线程的安全问题一直是我们在开发过程中重要关注的地方,出现线程安全问题的必须满足两个条件:存在着两个或者两个以上的线程;多个线程共享着共同的一个资源, 而且操作资源的代码有多句。接下来我们来根据JDK自带的方法来解决线程带来的问题。 一、同步代码块synchronized 我们来看一个实例,创建两个线 阅读全文
posted @ 2019-09-17 20:09 想去天空的猫 阅读(216) 评论(0) 推荐(0) 编辑