05 2021 档案

摘要:在JDK5U9之后,NIO在Linux 内核版本大于2.6的服务器上支持了epoll。其对并发的处理会有大幅度的性能提升,JVM启动参数如下: 1 -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider 在t 阅读全文
posted @ 2021-05-11 17:58 莫待樱开春来踏雪觅芳踪 阅读(358) 评论(0) 推荐(0)
摘要:转载:http://m.blog.csdn.net/article/details?id=51512200 AIO异步非阻塞IO实例:客户端发送数学表达式,经过服务端接收计算后返回客户端。 1、服务端 包括,Server、ServerHandler、ServerWriteHandler、Server 阅读全文
posted @ 2021-05-11 17:53 莫待樱开春来踏雪觅芳踪 阅读(246) 评论(0) 推荐(0)
摘要:NIO socket是非阻塞的通讯模式,与IO阻塞式的通讯不同点在于NIO的数据要通过channel放到一个缓存池ByteBuffer中,然后再从这个缓冲池中读出数据,而IO的模式是直接从inputstream中read。所以对于NIO,由于存在缓冲池的大小限制和网速的不均匀会造成一次读的操作放入缓 阅读全文
posted @ 2021-05-11 17:50 莫待樱开春来踏雪觅芳踪 阅读(371) 评论(0) 推荐(0)
摘要:Netty也支持AIO并提供了相应的类: AioEventLoopGroup,AioCompletionHandler, AioServerSocketChannel,AioSocketChannel, AioSocketChannelConfig。其它使用方法和NIO类似。 Netty对缓冲区的扩 阅读全文
posted @ 2021-05-11 17:49 莫待樱开春来踏雪觅芳踪 阅读(153) 评论(0) 推荐(0)
摘要:前言 从JDK 7版本开始,Java新加入的文件和网络io特性称为nio2(new io 2, 因为jdk1.4中已经有过一个NIO了),包含了众多性能和功能上的改进,其中最重要的部分,就是对异步io的支持,称为Java AIO(asynchronous IO)。因为AIO的实施需充分调用OS参与, 阅读全文
posted @ 2021-05-11 17:48 莫待樱开春来踏雪觅芳踪 阅读(701) 评论(0) 推荐(0)
摘要:前言 java通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理文件读写,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高。MappedByteBuffer引入了内存映射文件的方法,该方案是建立的操作系 阅读全文
posted @ 2021-05-11 17:47 莫待樱开春来踏雪觅芳踪 阅读(612) 评论(0) 推荐(0)
摘要:Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使 阅读全文
posted @ 2021-05-11 17:44 莫待樱开春来踏雪觅芳踪 阅读(78) 评论(0) 推荐(0)
摘要:缓冲区简介 操作系统有用户空间与系统空间的概念,JVM对应的JAVA进程是位于用户空间的,处于该空间的进程不能直接访问硬件设备,当JAVA进程要进行I/O操作时,只能通过系统调用将控制权交给内核,内核准备好进程所需要的数据,将这些数据拷贝到用户空间缓冲区(如下图所示)。 Java NIO中的Buff 阅读全文
posted @ 2021-05-11 17:40 莫待樱开春来踏雪觅芳踪 阅读(118) 评论(0) 推荐(0)
摘要:通过上一篇对JAVA NIO的源码分析,对一些重要的代码实现进行了探究,现将从源码分析中得出的结论总结如下。 一、源码分析流程梳理。 1.Selector.open() 获取选择器的时候,根据不同的操作系统创建Selector实现类,实现类创建了用于保存通道句柄和事件类型的数据结构PollArray 阅读全文
posted @ 2021-05-11 17:39 莫待樱开春来踏雪觅芳踪 阅读(174) 评论(0) 推荐(0)
摘要:1.前言 JDK1.4之前的传统阻塞IO(BIO),服务端需要为每一个客户端连接创建单独的线程为其服务,从JDK1.4开始NIO非阻塞式IO出现,它只需要单独的一个线程就能接收多个客户端请求,而真正处理各个请求的细节可以使用多线程的方式高效率的完成,这些处理线程与具体的业务逻辑分离,做到了IO的复用 阅读全文
posted @ 2021-05-11 17:38 莫待樱开春来踏雪觅芳踪 阅读(499) 评论(0) 推荐(1)
摘要:传统IO有两种形式,一种是阻塞IO,另一种是阻塞IO+每个请求创建线程/线程池。 阻塞IO IO的阻塞、非阻塞主要表现在一个IO操作过程中,如果有些操作很慢,比如读操作时需要准备数据,那么当前IO进程是否等待操作完成,还是得知暂时不能操作后先去做别的事情?一直等待下去,什么事也不做直到完成,这就是阻 阅读全文
posted @ 2021-05-11 17:33 莫待樱开春来踏雪觅芳踪 阅读(86) 评论(0) 推荐(0)
摘要:1、网络进程通信之socket 在使用TCP/IP协议族进行网络通信的过程中,网络层的IP地址可以唯一标识一台网络主机,而传输层的协议+端口可以唯一标识主机中的应用程序进程,利用这样的三元组合(IP地址,协议,端口)就可以在网络中唯一标识网络中的进程,从而为进程在网络中的通信建立了基石。 TCP/I 阅读全文
posted @ 2021-05-11 17:31 莫待樱开春来踏雪觅芳踪 阅读(219) 评论(0) 推荐(0)
摘要:前言 在分析一些jdk8的源码比如StampedLock的时候,发现有对long类型的变量进行“~”操作: 1 private static final long RBITS = 127; 2 private static final long SBITS = ~RBITS; 上面的代码中,long 阅读全文
posted @ 2021-05-11 17:27 莫待樱开春来踏雪觅芳踪 阅读(975) 评论(0) 推荐(0)
摘要:前言 Phaser是从JDK7开始提供的一个可重复使用的同步机制,它在功能上类似于CyclicBarrier和CountDownLatch,但它支持更灵活的使用场景。使用Phaser不仅能够替代CyclicBarrier和CountDownLatch,还能够做到它们做不到的功能。 通过前面的章节我们 阅读全文
posted @ 2021-05-11 17:24 莫待樱开春来踏雪觅芳踪 阅读(630) 评论(1) 推荐(1)
摘要:Striped64原理 通过前面的几章关于原子类的同步数据结构分析,我们知道Java并发包提供的原子类都是采用volatile+CAS机制实现的,这种轻量级的实现方式比传统的synchronize一般来说更加高效,但是在高并发下依然会导致CAS操作的大量竞争失败自旋重试,这时候对性能的影响说不定还不 阅读全文
posted @ 2021-05-11 17:18 莫待樱开春来踏雪觅芳踪 阅读(902) 评论(0) 推荐(3)
摘要:引言 ThreadLocalRandom类是从JDK7开始在并发包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足。ThreadLocalRandom为后面要探讨的高并发累加器Striped64及其实现类提供了基础,所以先要理解它 阅读全文
posted @ 2021-05-11 17:14 莫待樱开春来踏雪觅芳踪 阅读(701) 评论(0) 推荐(0)
摘要:引言 在上一文CPU高速缓存行之伪共享中,我们探讨了高速缓存行的伪共享对Java程序带来的问题以及坎坷的解决之路。幸运的是,最终由官方给出了sun.misc.Contended注解结束了这场悲剧。在上文中可以发现,对于Java对象的内存布局还是比较重要的,而且Contended注解不但能够用在类上, 阅读全文
posted @ 2021-05-11 17:10 莫待樱开春来踏雪觅芳踪 阅读(957) 评论(0) 推荐(1)
摘要:什么是伪共享 为了理解“伪共享”,在上一文CPU高速缓存那些事儿中我们主要对CPU高速缓存的原理构造进行大致的了解,其实通过CPU高速缓存的理解以及在文末提到的缓存一致性协议,我们已经能够很容易的理解所谓的“伪共享”的问题。 在这里,我们在来回顾一下CPU高速缓存的知识,在现代计算机中,CPU缓存是 阅读全文
posted @ 2021-05-11 17:07 莫待樱开春来踏雪觅芳踪 阅读(509) 评论(0) 推荐(1)
摘要:引言 在分析JDK8新增的高并发原子累加器Striped64的时候,发现有一个“伪共享”的概念,而要理解它必须对CPU缓存有一定的了解,所以本文将先对CPU的缓存架构以及一些相关术语做一个研究探索。 CPU缓存的原理 众所周知,在如今的计算机时代,CPU的运算处理速度与内存读写速度的差异非常巨大,为 阅读全文
posted @ 2021-05-11 17:00 莫待樱开春来踏雪觅芳踪 阅读(999) 评论(0) 推荐(1)
摘要:引言 前面介绍的原子更新器都只是针对单个对象或者字段元素进行原子更新操作,在序章中提到的第四类复合型的原子更新器可以将一个引用变量与其他变量绑定到一起,实现复合的原子更新操作,这类更新器有两个: AtomicMarkableReference、AtomicStampedReference。 Atom 阅读全文
posted @ 2021-05-11 16:58 莫待樱开春来踏雪觅芳踪 阅读(83) 评论(0) 推荐(0)
摘要:引言 接下来是原子类序章中我们提到的原子更新字段类,它们是AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,AtomicReferenceFieldUpdater。其实就是了原子的更新一个引用类型的整形字段、long型字段、引用类型字段。 Atomic 阅读全文
posted @ 2021-05-11 16:56 莫待樱开春来踏雪觅芳踪 阅读(130) 评论(0) 推荐(0)
摘要:引言 通过原子类序章我们知道Java并发包提供的原子类共分5类,这里开始介绍第二类数组类,其实也就是通过数组下标原子更新基本类型和引用类型的数组中的元素,它们是:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray。由于AtomicLongA 阅读全文
posted @ 2021-05-11 16:52 莫待樱开春来踏雪觅芳踪 阅读(175) 评论(0) 推荐(0)
摘要:引言 通过原子类序章我们知道Java并发包提供的原子类共分5类,这里开始介绍第一类标量类,其实也就是原子更新基本类型和引用类型,它们是:AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference. 它们提供的方法基本相同,其中AtomicBoolea 阅读全文
posted @ 2021-05-11 16:43 莫待樱开春来踏雪觅芳踪 阅读(183) 评论(0) 推荐(0)
摘要:概述 关于Java并发包的原子相关类其实可以在Unsafe后面紧接着进行介绍,因为这些原子类其实只是建立在对Unsafe的调用基础上并没有利用到Java并发包的其他类,出于前面介绍的同步组件在Java并发包的重要性,我才将它们放在了原子类的前面。 Java从JDK 1.5开始提供的java.util 阅读全文
posted @ 2021-05-11 16:38 莫待樱开春来踏雪觅芳踪 阅读(117) 评论(0) 推荐(0)
摘要:引言 在上一章我们了解了ReentrantReadWriteLock读写锁,它实现了多个读操作之间不再被相互等待阻塞,但是读操作和写操作之间,写操作和写操作之间依然还是会被相互阻塞。另外,ReentrantReadWriteLock读写锁有个很致命的缺陷,那就是当读多写少的时候将可能会存在写线程饥饿 阅读全文
posted @ 2021-05-11 16:36 莫待樱开春来踏雪觅芳踪 阅读(200) 评论(0) 推荐(0)
摘要:前言 在前面我们介绍的独占式同步组件ReentrantLock实现了标准的互斥操作,它是和synchronize关键字一样在某一时刻只有一个线程能够获得同步锁,从使用者的角度出发,它还是一种保守锁策略,试想:对共享资源的并发访问中,大部分都是执行读操作,而变更共享资源的写操作却非常少,在这种情况下, 阅读全文
posted @ 2021-05-11 16:31 莫待樱开春来踏雪觅芳踪 阅读(158) 评论(0) 推荐(0)
摘要:引言及简介 前面我们介绍了独占锁ReentrantLock实现的一个同步辅助工具CyclicBarrier, 它能够使一组线程互相等待,今天我们介绍另一种同步辅助器CountDownLatch,它其实可以看着是利用共享锁实现的,只不过它没有使用到类似共享锁Semaphore那么复杂的逻辑,所以它的实 阅读全文
posted @ 2021-05-11 16:27 莫待樱开春来踏雪觅芳踪 阅读(104) 评论(0) 推荐(0)
摘要:前言 前面我们学习了AQS以及基于AQS实现的Du占锁ReentrantLock和基于ReentrantLock实现的同步辅助工具CyclicBarrier,本节我们学习JDK提供的另一个类Semaphore。Semaphore翻译过来就是“信号量”,JDK提供的这个Semaphore被称之为计数信 阅读全文
posted @ 2021-05-11 16:25 莫待樱开春来踏雪觅芳踪 阅读(252) 评论(0) 推荐(0)
摘要:引言及简介 上一章我们介绍了独占式的同步组件ReentrantLock,今天我们先不忙着继续介绍其他Lock接口的实现类同步组件,先来看看JDK基于ReentrantLock同步组件以及Condition条件等待机制实现的一个同步辅助器CyclicBarrier。 CyclicBarrier是一个同 阅读全文
posted @ 2021-05-11 16:22 莫待樱开春来踏雪觅芳踪 阅读(127) 评论(0) 推荐(0)
摘要:前言 ReentrantLock作为Java并发包显示锁的典型实现,又被称作可重入的独占锁,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵 阅读全文
posted @ 2021-05-11 16:19 莫待樱开春来踏雪觅芳踪 阅读(114) 评论(0) 推荐(0)
摘要:引言 终于走到这一步,在JDK5之前,Java都是通过synchronized关键字实现同步锁功能的,通过前面对synchronized关键字的阐述,相信我们已经非常了解了其特性,它是为了保证在多线程并发下对共享资源的访问的线程安全。从JDK5开始,Java提供了另一种加锁的方式即我们在可见性、有序 阅读全文
posted @ 2021-05-11 16:16 莫待樱开春来踏雪觅芳踪 阅读(158) 评论(0) 推荐(0)
摘要:一、引言 在上一章的AQS同步阻塞与唤醒源码分析中,我们知道作为同步组件的基础核心框架AQS(AbstractQueuedSynchronizer), 其内部层次结构分为三部分,第一部分是AbstractQueuedSynchronizer类本身,第二部分是实现同步队列节点的静态内部类Node,第三 阅读全文
posted @ 2021-05-11 16:15 莫待樱开春来踏雪觅芳踪 阅读(401) 评论(0) 推荐(0)
摘要:四、AQS共享获取/释放源码分析 在上文中对Du占方式获取和释放共享资源相关的源码进行了分析,本节接着开始对共享式获取/释放资源的源码进行分析。共享式与Du占式的最主要区别在于同一时刻Du占式只能有一个线程成功获取同步资源,而共享式在同一时刻可以有多个线程成功获取同步资源。例如读操作可以有多个线程同 阅读全文
posted @ 2021-05-11 16:11 莫待樱开春来踏雪觅芳踪 阅读(278) 评论(0) 推荐(0)
摘要:一、引言 AQS,是AbstractQueuedSynchronizer的简称,它是Java5构建锁或者其他同步组件的基础核心框架,是理解整个Java并发包最关键的类,没有之一。同时,AQS解决了实现同步器时的大量细节问题,例如同步状态的基本操作、FIFO同步阻塞队列操作、Condition条件阻塞 阅读全文
posted @ 2021-05-11 16:06 莫待樱开春来踏雪觅芳踪 阅读(324) 评论(0) 推荐(0)
摘要:前言 LockSupport 和 CAS 是Java并发包中很多并发工具控制机制(Lock和同步器框架的核心 AQS: AbstractQueuedSynchronizer)的基础,它们底层其实都是依赖Unsafe实现。 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。其主要的核心 阅读全文
posted @ 2021-05-11 16:02 莫待樱开春来踏雪觅芳踪 阅读(274) 评论(0) 推荐(0)
摘要:前言 一直以来,Java作为一门高级语言给人的印象是程序员不需要也没有办法直接对内存进行操作,其实Unsafe类就是Java中可以直接操作内存的工具,它属于sun.* 路径下的API,而不属于J2EE的一部分。 需要说明的是:直接操作内存是很危险的一件事,并且Unsafe是一个平台相关的类,它操作的 阅读全文
posted @ 2021-05-11 15:58 莫待樱开春来踏雪觅芳踪 阅读(323) 评论(0) 推荐(0)
摘要:引言 前面使用了大量的章节对线程、Java内存模型、synchronized锁等进行了详细的介绍,同时也清楚了其实大部分的内容都是在围绕着并发过程中的原子性、可见性和有序性进行探讨,除了synchronized这样的隐式锁,前文还提到Lock对象支持的显式锁同样能够对这三大特征进行支持。从本章节开始 阅读全文
posted @ 2021-05-11 15:51 莫待樱开春来踏雪觅芳踪 阅读(381) 评论(0) 推荐(0)
摘要:介绍完Java内存模型的相关操作与规则,会发现其主要就是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的,这也是并发编程最核心的核心概念。 可见性 可见性是指在并发环境下,当一个线程修改了共享变量的值,其他线程能够立即得知这个修改。 在多核处理器的架构中,由于CPU缓存的存在,当某 阅读全文
posted @ 2021-05-11 15:49 莫待樱开春来踏雪觅芳踪 阅读(291) 评论(0) 推荐(0)
摘要:术语 在上一文关于synchronized锁机制的探寻中,我们知道在那些锁机制的底层实现中或多或少的都借助了CAS操作,其实Java中java.util.concurrent包的实现也是差不多建立在CAS之上,可见CAS在Java同步领域的重要性。 CAS是Compare and Swap的简写形式 阅读全文
posted @ 2021-05-11 15:47 莫待樱开春来踏雪觅芳踪 阅读(301) 评论(0) 推荐(0)
摘要:3.7 锁消除 消除同步锁是JVM另外一种锁的优化,这种优化更彻底, JVM通过运行时JIT编译(可以理解为当某段代码即将第一次被执行时进行编译,又称即时编译),对一些在代码上要求添加同步,但是通过数据逃逸技术分析发现不可能存在共享数据竞争,这时JVM会对这些没有必要的同步锁进行消除。所以锁消除可以 阅读全文
posted @ 2021-05-11 15:44 莫待樱开春来踏雪觅芳踪 阅读(89) 评论(0) 推荐(0)
摘要:一、互斥同步 在前面我们了解了什么是线程安全与synchronized的基本应用,那么如何才能实现线程安全?互斥同步是最常见的一种并发线程安全保障手段,同步是指在多个线程并发访问共享数据时,保证共享数据在同一时刻只被一条线程使用,互斥是实现同步的一种手段,临界区、互斥量和信号量都是互斥典型的实现方式 阅读全文
posted @ 2021-05-11 15:37 莫待樱开春来踏雪觅芳踪 阅读(302) 评论(1) 推荐(0)
摘要:除了volatile和synchronized可实现可见性之外,final关键字也可以实现可见性(但final域所属的引用不能从构造方法中“逸出”)。synchronized同步块的可见性是由happens-before的锁定规则获得的。下面就来详细的研究一下final关键字的内存语义。 对于 fi 阅读全文
posted @ 2021-05-11 15:35 莫待樱开春来踏雪觅芳踪 阅读(458) 评论(0) 推荐(0)
摘要:前言 volatile关键字是JVM提供的最轻量级的同步机制,但是由于其不容易被正确地、完整的理解,以至于许多程序员都习惯不去使用它,而总是选择synchronized重量级的锁机制来进行同步,本文将弄清楚volatile关键字的真正语义。 当一个变量被定义成volatile之后,它将具备两种语义特 阅读全文
posted @ 2021-05-11 15:34 莫待樱开春来踏雪觅芳踪 阅读(101) 评论(0) 推荐(0)
摘要:一、前言 通过前面的Java内存模型JMM了解,我们知道多线程程序在执行过程中,不仅存在多个工作内存与主内存之间的内存交互,而且还可能存在指令重排序的情况。这将导致在多线程环境下,线程间操作的可见性变得难以把握。 我们不能就所有场景来规定某个线程的修改何时对其他线程可见,但可以制定某些规则,一旦满足 阅读全文
posted @ 2021-05-11 15:31 莫待樱开春来踏雪觅芳踪 阅读(338) 评论(0) 推荐(0)
摘要:重排序背景 现代计算机的处理器架构几乎都采用流水线机制在一颗处理器内核中实现指令级并行运算(甚至一个CPU拥有多条独立的流水线这称为超标量),简单地理解即是说,将一条指令的执行过程拆分成不同的执行周期(例如取指、译码、转址、执行、写回等)分散到若干级流水线上执行,从而达到多条指令能同时处于这条流水线 阅读全文
posted @ 2021-05-11 15:24 莫待樱开春来踏雪觅芳踪 阅读(367) 评论(0) 推荐(0)
摘要:为了能够深入理解Java并发的原理,以及synchronized、volatile和Lock等内部原理,我们首先需要了解Java内存模型的相关知识。 一、从硬件的效率与一致性开始的硬件内存架构 由于计算机的运算速率和它的存储和通讯子系统速度的差距太大,现代计算机硬件已经从追求处理器频率发展到多核心并 阅读全文
posted @ 2021-05-11 15:21 莫待樱开春来踏雪觅芳踪 阅读(353) 评论(0) 推荐(0)
摘要:一、Wait/Notify线程通信机制原理 线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准备好了。 Java有一个内建的线程通信机制就是使用wait()、notify()和notifyAl 阅读全文
posted @ 2021-05-11 15:14 莫待樱开春来踏雪觅芳踪 阅读(458) 评论(0) 推荐(0)
摘要:一、线程同步与锁 同步和锁的概念,主要是为了解决多线程共享资源的问题。当多个线程对共享资源进行竞争访问,导致运行结果与期望不符时,通常就需要利用线程同步和锁的机制来消除这种多线程的竞争访问导致的差异性。示例: 1 public class ThreadCompetitionTest { 2 3 st 阅读全文
posted @ 2021-05-11 15:09 莫待樱开春来踏雪觅芳踪 阅读(150) 评论(0) 推荐(0)
摘要:概念 ThreadLoacl主要是用来做线程间共享但又不关联的共享变量的存储。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,也就是只是共用这个变量以及该变量的初始值,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 阅读全文
posted @ 2021-05-11 15:06 莫待樱开春来踏雪觅芳踪 阅读(243) 评论(0) 推荐(0)
摘要:1 线程组概念 Java中提供了线程组类: java.lang.ThreadGroup, ThreadGroup线程组是为了方便管理线程,它可以统一设定线程组中的线程的优先级,或者设置为守护线程,或者为没有设置异常处理器的线程设置统一的异常处理器等等,同时也可以通过线程组方便的获的线程组中的线程的一 阅读全文
posted @ 2021-05-11 15:00 莫待樱开春来踏雪觅芳踪 阅读(253) 评论(0) 推荐(0)
摘要:线程生命周期示意图: 线程的状态: 1. 初始状态(New) 当创建了线程对象实例 即 new Thread(...) 之后,线程进入初始状态,注意这个时候,它还仅仅是一个普通的对象实例,而不是真正的线程,JVM也不会分配相应的资源,例如栈内存空间。 2. 可运行状态/就绪状态(Runnable) 阅读全文
posted @ 2021-05-11 14:56 莫待樱开春来踏雪觅芳踪 阅读(73) 评论(0) 推荐(0)
摘要:1 线程中断interrupt 中断机制的实现是通过一个标记中断状态(interrupt status)实现的。我们通过调用某个线程对象的interrupt方法只是来设置这个标记,而并非直接终止线程的运行。当一个线程调用了Thread的静态方法interrupted判断到自己被中断后,立即会将这个状 阅读全文
posted @ 2021-05-11 14:46 莫待樱开春来踏雪觅芳踪 阅读(83) 评论(0) 推荐(0)
摘要:1 创建线程与创建线程运行时代码 在Java中,创建线程的方式只有一种,就是创建Thread对象的实例。创建线程运行时代码有三种方式: 第一种:继承Thread类,覆写其run方法。 第二种:实现Runnable接口,实现run方法,Thread类也实现了Runable接口。 第三种:实现Calla 阅读全文
posted @ 2021-05-11 14:40 莫待樱开春来踏雪觅芳踪 阅读(124) 评论(0) 推荐(0)
摘要:并发模型设定了系统中的并发线程如何协作完成被分配的任务。不同的并发模型存在不同的业务拆分与线程协作方式。 一 并行工作者模型。 在并行工作者模型中,委派者(Delegator)将作业分派给不同的工作者,每个工作者独立完成整个任务作业。工作者大多是以多线程的方式并行运行。 1.1 并行工作者模型的优点 阅读全文
posted @ 2021-05-11 14:21 莫待樱开春来踏雪觅芳踪 阅读(122) 评论(0) 推荐(0)
摘要:一、概念术语 进程:进程通常是程序、应用的同义词。不过,用户所看到的一个单独的应用事实上可能还会有一系列的协作进程(cooperating processes),例如Linux上就可以通过fork创建一个进程副本。最简单的情况下,一个应用就是一个进程。大部分Java虚拟机的实现都是作为单进程运行的, 阅读全文
posted @ 2021-05-11 10:39 莫待樱开春来踏雪觅芳踪 阅读(102) 评论(0) 推荐(0)