![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA学习笔记
文章平均质量分 57
sinat_36263171
这个作者很懒,什么都没留下…
展开
-
[JAVA学习笔记-97]ActiveObject模式的Scheduler的关键实现
public class CustomScheduler implements Runnable { private LinkedBlockingQueue activationQueue = new LinkedBlockingQueue(); @Override public void run() { dispatch(); } public Future原创 2017-06-10 12:42:16 · 167 阅读 · 0 评论 -
[JAVA学习笔记-87]CompletionService简单分析
1、ExecutorCompletionService 的构造函数中,aes 对应 AbstractExecutorService 或 nullcompletionQueue 对应 LinkedBlockingQueue> ,此队列用来保存FutureTask本身2、执行submitRunnableFuture f = newTaskFor(task); //Runnable/原创 2017-06-08 13:43:12 · 181 阅读 · 0 评论 -
[JAVA学习笔记-86]ConcurrentHashMap与synchronizedMap的对比
╔═══════════════╦═══════════════════╦═══════════════════╦═════════════════════╗║ Property ║ HashMap ║ Hashtable ║ ConcurrentHashMap ║╠═══════════════╬════════原创 2017-06-08 13:40:27 · 296 阅读 · 0 评论 -
[JAVA学习笔记-85]java的concurrent包的整体认识
java doc的描述有两个分类,interface summary与Class summary。一、根据接口来大致归类在这里,借用族的概念,来大致划分接口的归属,相同族的接口,归属于与其相关的核心接口1、Blocking queue族BlockingDequeBlockingQueueDelayedTransferQueue2、Executor族Execu原创 2017-06-08 13:36:21 · 243 阅读 · 0 评论 -
[JAVA学习笔记-84]关于死锁故障的反思
1、注意隐式的锁竞争隐式的锁竞争,可能会造成意外的死锁,如HashMapA.putAll(HashMapB),如果HashMapB是synchronized封装的,此处隐式的HashMapB.size()会竞争HashMap,可能造成死锁。2、尽量使用明锁明锁即reentrantLock,Object等显式调用的锁,或者用synchronized标记的函数/代码块3、尽原创 2017-06-08 13:35:31 · 165 阅读 · 0 评论 -
[JAVA学习笔记-83]Ant简单入门
原创 2017-06-08 13:34:19 · 197 阅读 · 0 评论 -
[JAVA学习笔记-82]Thread states in JAVA
JAVA doc的说明:[https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html]public static enum Thread.Stateextends EnumA thread state. A thread can be in one of the following states:原创 2017-06-08 13:31:30 · 737 阅读 · 0 评论 -
[JAVA学习笔记-81]定位dead lock的几种方法
1、查看linux的SIG列表 man 7 signal,下拉可以有完整的signal列表2、jconsole is able to detect deadlocks in a running application(Thread 标签下有个detect deadlock选项)3、使用JDK的jstack命令获取JVM的调用栈4、使用kill -3 pid,打出指定进程的JVM调用栈,目前原创 2017-06-08 13:27:53 · 204 阅读 · 0 评论 -
[JAVA学习笔记-80]Java service wrapper入门
Java service wrapper可以将java程序像业务一样部署到Linux/Windows平台,Wrapper进程类似一个daemon,负责监听java程序的状态,当java程序出现异常崩溃(如JVM崩溃)时,对java程序的业务进行重启,并记录日志等。【配置方法】: 1、下载指定的程序包,注意OS平台,32bit/64bit,并区分standard与community版本,其原创 2017-06-08 13:26:24 · 402 阅读 · 0 评论 -
[JAVA学习笔记-78]lockInterruptibly
lock()适用于锁获取操作不受中断影响的情况,此时可以忽略中断请求正常执行加锁操作,因为该操作仅仅记录了中断状态(通过Thread.currentThread().interrupt()操作,只是恢复了中断状态为true,并没有对中断进行响应)。如果要求被中断线程不能参与锁的竞争操作,则此时应该使用lockInterruptibly方法,一旦检测到中断请求,立即返回不再参与锁的竞争并且取消锁获取操原创 2017-06-07 14:04:21 · 242 阅读 · 0 评论 -
[JAVA学习笔记-88]DelayQueue实现Leader-Follower pattern
DelayQueue实现Leader-Folloer pattern1、当存在多个take线程时,同时只生效一个,即,leader线程2、当leader存在时,其它的take线程均为follower,其等待是通过condition实现的3、当leader不存在时,当前线程即成为leader,在delay之后,将leader角色释放还原4、最后如果队列还有内容,且leader空缺,则原创 2017-06-08 13:45:01 · 1152 阅读 · 0 评论 -
[JAVA学习笔记-73]Executors的两种定时执行机制
ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)Creates and executes a periodic action that becomes enabled first after the given initial原创 2017-06-10 11:27:33 · 1108 阅读 · 0 评论 -
[JAVA学习笔记-96]ThreadLocal
综述:ThreadLocal可以理解为一个对象容器,这个容器为每个访问该容器的线程,封装了一个只对当前线程可见的对象。也就是说,当多个线程共用一段代码时(例如同一个runnable对象分配给多个线程运行),ThreadLocal封装的对象将会是线程安全的,只是访问的时候,需要用到set、get、remove、initValue等方法,否则,这些对象将会是多线程共享的,是非线程安全的原创 2017-06-10 12:39:43 · 206 阅读 · 0 评论 -
[JAVA学习笔记-95]REST框架浅析
基于Web的架构,实际上就是各种规范的集合,这些规范共同组成了Web架构。比如Http协议,比如客户端服务器模式,这些都是规范。每当我们在原有规范的基础上增加新的规范,就会形成新的架构。而REST正是这样一种架构,他结合了一系列的规范,而形成了一种新的基于Web的架构风格。传统的Web应用大都是B/S架构,它包括了如下一些规范:1.客户-服务器:2.无状态性:要求通信必须在原创 2017-06-10 12:37:05 · 223 阅读 · 0 评论 -
[JAVA学习笔记-94]JVM的client与server模式
client模式在 64-bit JDK上已经被忽略了,直接使用Java Hotspot Server VM.出处:https://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html-clientSelects the Java HotSpot Client VM. A 64-bit capable JDK原创 2017-06-10 12:35:29 · 219 阅读 · 0 评论 -
[JAVA学习笔记-93]DatagramSocket的线程安全性
1.DatagramSocket reads and writes are independent of each other2.DatagramSocket writes are atomic so they are thread-safe3.DatagramSocket reads are synchronized by java and they are also atomic at原创 2017-06-10 12:28:50 · 338 阅读 · 0 评论 -
[JAVA学习笔记-92]concurrentLinkedQueue的特性
1、应用场景按照适用的并发强度从低到高排列如下:LinkedList/ArrayList 非线程安全,不能用于并发场景(List的方法支持栈和队列的操作,因此可以用List封装成stack和queue)Collections.synchronizedList 使用wrapper class封装,每个方法都用synchronized(mutex:Object)做了同步Link原创 2017-06-10 12:24:36 · 963 阅读 · 0 评论 -
[JAVA学习笔记-91]关于可重入函数
到目前为止,接触过两种可重入对象,可重入函数,与可重入锁。虽然都是可重入,但概念上应该有所区分。可重入锁,指的此lock可以多次重复获取,例如reentrantLock对象,同一个线程在持有该锁后,可重复获取该锁,而不需要再竞争,也不会造成自我死锁,只是锁的持有计数增加,并且持有者释放锁的次数要与获取锁匹配,否则该锁将一直被持有,造成资源不释放。可重入函数,指的是次函数原创 2017-06-10 12:23:21 · 518 阅读 · 0 评论 -
[JAVA学习笔记-90]并发与并行
首先从CPU的角度来理解并发和并行:对于单核的CPU,如果同时处理多个任务,必然需要依据调度原则进行分时处理,而在宏观上,对于使用者来说,这些任务被这一个CPU同时(同一个时间段)完成了。这就是并发,concurrency。对于多核CPU,多个任务可分别运行在各自的CPU核上,这些任务是物理上同时的(同时在被执行),这就是并行,parallelism。从软件的角度来看:原创 2017-06-10 12:20:52 · 179 阅读 · 0 评论 -
[JAVA学习笔记-89]Executor框架的详细解读
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html原创 2017-06-10 12:19:39 · 170 阅读 · 0 评论 -
[JAVA学习笔记-71]ThreadPoolExecutor的execute原理
原理综述:ThreadPool 用一个Worker对象封装了用户指定的Runnable对象,同时Worker类实现了Runnable接口,Worker对象将自己封装到一个Thread对象并保存在自身内部,ThreadPool将满足条件的Worker对象加入Workers的HashSet,并调用Worker.start()启动Worker线程,Worker在run中会调用启动内部封装的R原创 2017-06-10 11:34:24 · 224 阅读 · 0 评论 -
[JAVA学习笔记-77]关于BlockingQueue
java.util.concurrent Interface BlockingQueueAll Superinterfaces: Collection, Iterable, Queue All Known Subinterfaces: BlockingDeque, TransferQueueAll Known Implementing Classes: Linked原创 2017-06-07 13:57:47 · 317 阅读 · 0 评论 -
[JAVA学习笔记-76]volatile的原子性与可见性
所谓原子操作,是不会被线程调度中断的操作。线程在进行原子操作时,不会被中断或抢占,因此原子操作是线程安全的。原子性是针对操作而言的,而可见性是变量本身对于多个线程而言的。两者描述的是两个概念。以volatile变量为例,当volatile变量的值被某个线程修改时,若有其它线程读取该值,在汇编语言层面会强制将改写过的值通过内存刷新到访问线程的寄存器中,换句话说,volatile变量的值通过机器原创 2017-06-07 13:56:04 · 306 阅读 · 0 评论 -
[JAVA学习笔记-53]ForkJoin_invoke_submit_execute
在ForkJoinPool中,有invoke,submit,execute三个接口可以提交任务运行,这三个接口有什么区别?分别适用什么场景?综述:当前线程是FJ工作线程且属于当前FJPool,execute,submit方法会调用forkOrSubmit将task加入到工作线程的任务队列,而invoke直接调用FJTask的exec()方法;当前线程非FJ工作线程或者不属于当前FJ原创 2016-10-17 13:00:40 · 3620 阅读 · 1 评论 -
[JAVA学习笔记-54]StringBuffer源码片断
StringBuffer 怎样动态扩展长度? value = Arrays.copyOf(value, newCapacity);StringBuffer 怎样append?怎么体现builder模式? final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,原创 2016-10-17 12:46:56 · 162 阅读 · 0 评论 -
[JAVA学习笔记-61]CopyOnWriteArrayList
某个线程使用Iterator遍历该List时,若有另外一个线程对其修改,实际修改的是内存中的一份拷贝,对Iterator操作无影响,从而规避了并发操作的问题。缺点:1、消耗更多的内存优点:1、在大量读操作的,改动操作较少的应用场景,可以规避阻塞,等待,提高读取效率; 注意区别读写锁,读写锁在写操作的时候,读操作是被阻塞的,只有读操作可以并发。 问题:原创 2016-09-29 08:34:17 · 180 阅读 · 0 评论 -
[JAVA学习笔记-62]inputstream及几个相关的类
Class InputStream 【字节流的基类】【This is an abstract class,it is the superclass of all classes representing an input stream of bytes.所有代表字节流的对象的超类,其子类都需要实现read接口,此接口返回字节流中的下一个字节(可以理解为当前字节流队列的首字节),原创 2016-09-29 08:32:33 · 440 阅读 · 0 评论 -
[JAVA 学习笔记-63]InetAddress
Class InetAddress 【代表一个IP地址】【This class represents an Internet Protocol (IP) address.An IP address is either a 32-bit or 128-bit unsigned number used by IP, a lower-level protocol on which proto原创 2016-09-28 13:12:47 · 176 阅读 · 0 评论 -
[JAVA学习笔记-55]摘要鉴权算法
401 responseWWW-Authenticate realm 带domainnonce 带opaque 带stalealgorithmqop-options 带auth-param 未来扩展,目前无用Authorizationusername 用户名realm 域名,与401一致 带原创 2016-10-10 14:15:42 · 1183 阅读 · 0 评论 -
[JAVA学习笔记-56]Selector
1、sc.register(selector,key) 注册的时机? 需要根据需要,不断变换SocketChannel关注的OP事件; 需要叠加 OPS的话,要用 | 或操作,而不能多次注册,多次注册只会覆盖; OPS用一个byte保存,多次注册,只是把这个byte变量覆盖了,会导致前一个 OPS 失效(如果不重复的话)。 2、一方进程崩溃,另一方如何安全关闭?原创 2016-10-10 14:14:20 · 269 阅读 · 0 评论 -
[JAVA学习笔记-64] Future与Callable的关联
一个Future对象与一个被提交到ExecutorService对象去执行的Callable对象相关联,使用Future可以:1、取消一个Callable任务2、获取Callable任务的返回值3、查看Callable任务是否被取消4、查看Callable任务是否已经完成执行(正常执行完毕,异常退出,被取消)Future对象与Callable对象是如何关联的?1原创 2016-09-29 08:31:08 · 313 阅读 · 0 评论 -
[JAVA学习笔记-66]系统吞吐量的概念
一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间 QPS(TPS):每秒钟request/事务 数量转载 2016-10-09 10:33:51 · 4178 阅读 · 0 评论 -
[JAVA学习笔记-51]ForkJoin
【ForkJoin的运行原理简析】1.CaLL ForkJoinPool.invoke(ForkJoinTask)2.put the given task into taskqueue of the pool(addSubmission(task);)3.the a ForkJoinWorkerThread will scan the queue,call ForkJoinTask.d原创 2016-10-17 13:15:29 · 254 阅读 · 0 评论 -
[JAVA学习笔记-60]ByteBuffer的分配方式的比较
public static ByteBuffer allocate(int capacity) public static ByteBuffer allocateDirect(int capacity) 方法1从JVM进程的堆上分配内存,分配的ByteBuffer可被GC标记并回收;方法2调用系统的native方法分配内存,分配的ByteBuffer对象不能被GC回收,需要原创 2016-10-08 08:50:41 · 1888 阅读 · 0 评论 -
[JAVA学习笔记-75]关于CAS
Compare and swap CAS即比较并交换,目前处理器在指令集中予以支持。换句话说,对于应用程序开发来说,并不直接使用CAS方法,而是使用特定的接口来使用。 以JAVA为例,CAS被封装在原子对象中,如AtomicInteger,如果调用其incrementAndGet()方法,则方法内部通过unsafe调用底层操作系统+汇编 指令执行CAS。 还是以JAV原创 2017-06-07 13:55:20 · 218 阅读 · 0 评论 -
[JAVA学习笔记-74]了解JDBC
JDBC provides methods to query and update data in a database. dynamically loading the correct Java packages and registerting them with the JDBC Driver Manager, the JDBC Driver Manager is used as a co原创 2017-06-07 13:54:18 · 283 阅读 · 0 评论 -
[JAVA学习笔记-72]关于Priority Inversion
任务优先级倒转。在任务设计时,如果分配了优先级,则高优先级的任务应该能够正常抢占低优先级任务的CPU时间和资源(mutex保护的资源),并先于低优先级任务执行。 实际使用mutex(或其它类似于Object锁)的机制时,低优先级任务若持有锁,会导致高优先级的任务在获取锁时阻塞,如果低优先级任务恰巧 没有及时释放锁,将可能导致严重问题。例如,高优先级任务可能会有超时定时器保护,一旦被阻原创 2017-06-07 13:50:50 · 315 阅读 · 0 评论 -
[JAVA学习笔记-69]Reactor与Proactor模式
Reactor模式: Reactor包含如下角色: • Handle 句柄;用来标识socket连接或是打开文件; • Synchronous Event Demultiplexer:同步事件多路分解器:由操作系统内核实现的一个函数;用于阻塞等待发生在句柄集合上的一个或多个事件;(如select/epoll;) • Event Handler:事件处理接口 • Con转载 2016-12-28 15:10:42 · 240 阅读 · 0 评论 -
[JAVA学习笔记-49]线程运行状态机
线程运行状态机转载 2016-12-28 14:53:03 · 286 阅读 · 0 评论 -
[JAVA学习笔记-70]AIO handler form
// 创建AsynchronousServerSocketChannel监听特定端口,并设置回调AcceptCompletionHandlerAsynchronousServerSocketChannel serverSocketChannel = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(PORT));原创 2016-12-28 14:45:04 · 338 阅读 · 0 评论