![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
大力海棠
蓝桥杯Java组个人赛省二,麻瓜ACMer的北京尚学堂·百战程序员( ̄y▽ ̄)~*
展开
-
volatile与synchronized谁更安全?
学习JMM时发现,并发程序下的数据一致性很重要,一个线程对某个数据做了修改,怎么保证另一个线程看到的这个数据是修改后的或者说是正确的?JMM的建立就是围绕三点:原子性、有序性和可见性。 原子性指的是一个操作是不可被打断的,即多个线程共同执行时,某个线程的操作不会被其他线程干扰。有序性问题比较难理解,在程序执行时有可能会出现指令重排,重排后的指令与原指令顺序就不一定相同了。你肯定想问为...原创 2019-01-14 20:30:36 · 625 阅读 · 0 评论 -
重入锁:Condition方法线程等待
前面的学习学过,为了多线程之间的同步,有wait( )和notify( )两个方法使用,不过这两个方法是在Object类上的,也就是所有的对象实体都有这两个方法。回顾一下,调用wait( )方法后,线程会在这个对象的等待队列上等待,直到其他线程调用notify( )方法,notify( )方法会在等待队列上随机唤醒一个等待线程,注意它是随机的!!随机唤醒!! 对象的wait( )和notify(...原创 2019-02-11 18:26:40 · 513 阅读 · 0 评论 -
两种线程“等待”,“门闩”和“栅栏”
CountDownLatch(门闩)和CyclicBarrier(栅栏)都是java.concurrent里的多线程控制工具类,我这里说他们两个都是控制线程等待,它们都像是一个计数器,让某一个线程等待计数完成后再执行,但是又有些不同,CountDownLatch是通过计数完成后才执行线程来控制线程等待,而CyclicBarrier可以是线程执行到某一处后等待计数,计数完成后再继续执行。 简单来说...原创 2019-03-04 20:24:03 · 856 阅读 · 0 评论 -
ForkJoin框架的分而治之
分而治之的思想不陌生了,归并排序用到,即把待排序列递归地等分成两个子序列,并排序,这样在不停递归等分,排序归并过程中,会得到若干个有序序列,因为递归过程是等分成左右序列嘛,所以最后会得到两个有序的序列,再做一次归并操作即可。外部排序中也用到,现在在多线程中也有,在多线程中分而治之思想有基于数据的分割和基于任务的分割。拿基于数据的分割来说,例如对于一个大文件的下载,使用多个线程分别下载一个大文件的不...原创 2019-04-01 19:57:15 · 304 阅读 · 0 评论 -
CAS实例:线程安全的读写队列
在并发环境下ArrayList和HashMap都是不安全的,对于ArrayList,假设多线程对同一个ArrayList一起做写入操作,有可能多个线程同时对ArrayList中同一个位置做赋值,导致最后期望数据和实际数据不一致。HashMap一样有可能出现数据不一致这个问题,且使用HashMap有可能出现更大的灾难,那就是多线程对同一个HashMap做遍历过程中可能会破坏链表的结构,出现如两个结点...原创 2019-04-08 17:02:43 · 650 阅读 · 0 评论 -
模拟自动回收内存机制(有向图多点可达性)
之前写过一篇边界标识内存管理算法,在分配内存端,分配算法没问题,有很多种,首次适应、最佳适应、最坏适应法等,分配的时机,看用户什么时候申请。在回收端,回收情况分很四种:左/右临界区为空闲块、左右临界区均为空闲块和左右临界区均不为空,根据不同的情况,空闲块回收的方法也不同。那么回收的时机呢?在C语言中,我们要显式地使用free()来回收不再使用的内存,在Java里,我们不需要这么做,自动回收机制会帮...原创 2019-05-06 17:14:18 · 396 阅读 · 0 评论 -
使用NIO构建服务器端和客户端(上)
构建一个最基本的服务器端和客户端连接,因为网络的读写操作都是使用标准IO,所以通常使用的是Socket处理机制来实现。假如要实现一个可以为多个客户端响应的服务器,服务器端为每一个建立了连接的客户端分配一个线程,每一个线程只为一个客户端连接服务,这种多线程的服务器开发是十分常见的,它的简单实现如下。 多线程服务器简单实现 要建立能处理多客户端连接处理的服务器,需要一个线程池,为每一个提交建立连接...原创 2019-06-17 16:53:11 · 1556 阅读 · 2 评论