-
65
热度 -
[综合] Java Concurrent--进程/线程
线程和进程 进程 进程是处于运行中的程序,是系统进行资源分配的调度的独立单位。 进程特点: 独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都有自己私有的地址空间。 动态性:进程和程序的区别就是进程是正在系统中活动的指令集合。 并发性:多个进程可在单个处理器上并发进行,进程...
70
热度 -
[综合] Java Concurrent--Java内存模型
缓存一致性 “让计算机并发处理多个任务”和“更充分利用计算机处理器的效能”之间看起来是因果关系,但实现起来非常麻烦。因为绝大多数运算任务都需要与内存交互,并非纯粹的计算。由于处理器和内存的处理速度不匹配(处理器运算速度远大于从内存中读取数据的速度),所以现代计算机系统通常加入一层高速缓存(Cache...
20
热度 -
[综合] Java Concurrent--先行发生原则
如果Java内存模型中所有有序性都靠volatile和synchronized来完成,那么编写代码会很繁琐,但日常Java开发中并没有感受到这一点,正是因为Java语言的“先行发生”原则。这个原则非常重要,它是判断数据是否存在竞争、线程是否安全的主要依据。 先行发生是Java内存模型中定义的两项操作...
25
热度 -
[综合] Java--自动装箱、拆箱与遍历循环
自动装箱、拆箱与遍历循环源代码: publicstaticvoidmain(String[]args){List<Integer>list=Arrays.asList(1,2,3,4);intsum=0;for(inti:list)sum+=i;System.out.print(sum)...
76
热度 -
[综合] Java--深入理解内部类
为什么使用内部类: 内部类最吸引人的原因是:每个内部类都可以独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了一个(接口的)实现,对内部类都没有影响。 如果没有内部类提供的、可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得更加...
11
热度 -
[综合] Java Concurrent--线程安全性(synchronized)
线程安全 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享和可变状态的访问。 从非正式的意义来讲,对象的状态是指存储在状态变量(例如实例或静态域)中的数据,可能包含其它依赖对象的域。 一个对象是否需要实现线程安全,取决于它是否会被多个线程访问。要使得对象是线程安全的,需要采取...
34
热度 -
[综合] Java Concurrent--内存可见性(volatile)
可见性 当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。但如果没有同步,可见性就无法实现。 下面的代码说明了当多个线程在没有同步的情况下共享数据时出现的错误。在代码中,主线程和读线程都会访问共享变量ready和number。很显然代码看起来会输出42,但事实上很可能输出0(重排序导致re...
42
热度 -
[综合] Java Concurrent--发布与逸出
1基本概念 发布(Publish):发布一个对象的意思是指,使对象能够在当前作用域之外的代码中使用。例如: 将一个指向该对象的引用保存在其他代码可以访问的地方; 在某一个非私有方法中返回该引用; 将引用传递到其他类的方法中。 逸出:当某个不应该发布的对象被发布时,这种情况就被称为逸出。 2什么...
84
热度 -
[综合] Java Concurrent--线程封闭和实例封闭
线程封闭: 当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术被称为线程封闭。它是实现线程安全最简单的方式之一。当某个对象封闭在一个线程中时,这种用法将自动实现线程安全性。即使被封闭的对象本身不是线程安全的。 1、栈封闭...
75
热度 -
[综合] Java Concurrent--显式锁(Lock)
类图: Lock接口 与内置加锁机制(synchronized)不同的是,Lock提供到了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方式都是显式的。Lock接口方法声明如下: publicinterfaceLock{voidlock();voidlockInterru...
17
热度 -
[综合] Java Concurrent -- 同步容器类
同步容器类 同步容器类包括Vector和Hashtable,其外还包括一些由Collections。synchronizedXxx()等工厂方法创建的同步封装器类。这些类实现线程安全的方式是:将他们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能够访问容器的状态。 同步容器类的问...
64
热度 -
[综合] Java Concurrent--同步工具类
同步工具类图 闭锁相关:CountDownLatch 信号量相关:Semaphore 栅栏相关:CyclicBarrier、Exchanger 线程池相关:Executors 什么是同步工具类 同步工具类可以是任何一种对象,只要它能够根据自身的状态来协调线程之间的控制流。阻塞队列、信号量、栅...
64
热度 -
[综合] Java Concurrent--并发容器类
并发容器类图 Queue Queue上的操作不会阻塞,如果队列为空,那么获取元素的操作将返回空值。虽然可以使用List来模拟Queue的行为--事实上正是通过LinkedList来实现Queue的,但Queue能够去掉List的随机访问请求,实现更高效的并发。 Queue有几种实现,包括Conc...
51
热度 -
45
热度 -
75
热度 -
[综合] Oracle查询第m到第n条数据
第一种方法:嵌套select 这种方法是最优方法,因为该方法进行排序后取值,所以能够保证两次取值都会取出相同的值。 最里面的那层select是提取满足要求的所有数据,然后第二层select用于选取前n条数据,最外面的select语句用于选取第m条之后的数据。 #Oracle从目标表中查询第m条到第n...
35
热度 -
[综合] 分布式Java--基于消息方式实现系统间通信
分布式系统之间通信可以分为两种: 基于消息方式实现系统间通信 基于远程调用方式实现系统间通信 基于消息方式实现系统间通信 分布式子系统之间需要通信时,就发送消息。一般通信的两个要点是:消息处理和消息传输。 消息处理:例如读取数据和写入数据。基于消息方式实现系统通信的消息处理可以分为同步消息和...
89
热度 -
102
热度 -
[综合] 支配树(Dominator Tree)
MAT中的支配树 在使用MAT分析项目的内存泄漏问题时,其中有一个支配树(Dominator)视图。如果我们把Java对象之间的引用关系看做一张有向图(可以存在环)的话,对象的支配树体现了对象之间的支配关系。如果所有指向对象B的路径都要经过对象A,则认为对象A支配对象B。如果对象A是离对象B最近的支...
116
热度