TA的博客

143

AtomicInteger是java并发包下面提供的原子类,主要操作的是int类型的数值,通过调用底层Unsafe的CAS等方法实现原子操作。源码分析一、主要属性(1)unsafe:Unsafe类的实例(2)value:使用int类型的value存储值,且使用volatile修饰,volatile主要是保证可见性,即一个线程修改对另一个线程立即可见(2)valueOffset:用于保存字段v...

一、什么是CAS?CAS(CompareAndSweap或者CompareAndSet,比较替换),CAS和volatile的读写共同支撑起了整合JUC包。工作原理是:一个CAS操作有三个操作数,目标内存地址V,旧的预期值E和将要替换的新值B,在进行替换操作前比较当且仅当目标内存地址V中的值和旧的预期值E值相等的时候才会发生替换,否则什么都不做。CAS是乐观锁技术,当多个线程尝试使用CAS同...

先给出结论:volatile可以保证不同线程对一个变量的可见性,即一个线程修改了被voaltile修饰的变量后,这新值对其他线程来说是立即可见的;volatile可以禁止指令重排序,保证了有序性;volatile不能保证原子性,更加不能保证线程安全,要想保证原子性和线程安全还是乖乖的使用锁吧!具体的原理且看我慢慢分析。一、Java内存模型JMM即JavaMemoryModel,它将JVM内存...

与Object的wait()/notify()相比:wait()、notify()、notifyAll()都必须配置Objectmonitor使用,而LockSupport的park()、unpark()方法不必park()、unpark()可以精确到一个线程来阻塞和唤醒它,但是notify()只能在WaitSet中随机唤醒一个,并且notifyAll()也只能是唤醒所有的线程,控制精度不及...

一、什么是等待/通知机制?多个线程之间也可以实现通信,原因就是多个线程共同刚访问同一个变量。但是这种通信机制不是“等待/通知”,两个线程完全是主动地读取一个共享变量。简单的说,等待/通知机制就是一个【线程A】等待,一个【线程B】通知(线程A可以不用再等待了)。比如生产者和消费者模型,消费者等待生产者生产资源,这是等待,生产者生产好资源通知等待的消费者去消费,这是通知。等待/通知的相关方法是任...

造成线程安全问题的诱因主要有两点:存在共享数据(临界区资源)存在多个线程对临界区资源的读写操作因此,为了保证临界区数据的安全,引入了互斥锁的概念,即一个共享数据同时只能被一个线程访问,其他线程需要等待(阻塞),直至当前线程处理完毕释放该锁。synchronized就保证了同一时刻只有一个线程对方法或者代码块的共享数据的操作。而且,synchronized由于他的互斥性间接的保证了一个线程对共...

在Java中一个线程终止有以下几种情况和方法1、线程执行完任务正常结束2、使用退出标志退出线程(推荐)一般run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。使用一个变量来控制循环,例如:最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出...

一、Runnable的实现类Thread类本质是Runnable的一个实现类,Runnable从jdk1.0就有了,并且在jdk1.8开始成为了一个函数式接口,这使得我么可以使用lambda简化线程的创建。二、Thread类的构造方法所有构造方法都是调用init()方法来完成对一个线程的初始化,下面是init方法的jdk源码:从源码中可以看出下面几点:每个线程都会有一个线程名,默认的名字是&...

一、ThreadLocal是什么?ThreadLocal是一个本地线程副本变量工具类。ThreadLocal中填充的变量只属于当前线程,与其他线程无关。ThreadLocal为变量在每个线程中都创建了一个副本,每个线程可以访问自己内部的副本变量。二、ThreadLocal深入源码剖析ThreadLocal常用的三个核心方法咱们这里以set(Tvalue)方法为例来探究一下ThreaLocal...

一、进程的概念?进程可以理解为一个应用程序执行的实例(比如在windows下打开Word就启动了一个进程),进程是资源分配的最小单位,每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。进程主要有数据、程序和程序控制块(PCB)组成,其中PCB是系统感知进程存在的唯一标志。二、线程的概念?线程是进程中的一个执行单元,一个进程中可以...

有时会用到,特此记录一下在使用后3条命令时如果遇到如下错误:这是由于挂载的目录没有停止,最简单的方法是重启服务器,然后在执行命令即可。

1、前提工作1.1准备一台具有公网IP的Linux服务器1.2申请一个域名,并将此域名和服务器的公网IP绑定1.3在阿里开发者平台上申请并获取SSL证书(1)在开启SSL后,来到下图所示页面,选择一个证书类型后,不用管他上面的报价,点击申请。(2)在接下来的这个页面中,选择你想要的证书服务类型(3)购买成功之后,跟随系统的引导完成证书的签发之后点击下载SSL证书。这里我下载了Nginx。证书...

1.启动docker时映射到宿主机时出现/usr/bin/docker-current:Errorresponsefromdaemon:driverfailed…的解决方案启动docker映射到宿主机时出现如下错误时:这是由于来自守护进程的错误响应,而致使外部连接失败。解决的办法就是将其docker进程kill掉,然后再清空掉iptables下nat表下的所有链(规则)。最后,...

0、什么是SSM?在软件开发领域里SSM是对Spring、SpringMVC、MyBatis这三大框架的简称。0.1、SpringSpring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由RodJohnson在其著作ExpertOne-On-OneJ2EEDevelopmentandDesign中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性...

       在上一篇博客深入理解JVM—垃圾回收器(GrabageCollector)基础篇我们了解了Java判定一个对象是否为垃圾的两种算法,以及3种垃圾回收算法。如果说收集算法室是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。接下来我们就一起来了解一下常见的垃圾收集器。1、垃圾收集器在G1垃圾出现之前,JVM是对堆内存进行分代管理的,分为新生代和老年代,按照这样的划分,不同分...