09 2018 档案

内部类(嵌套类)
摘要:嵌套类是指被定义在另一个类的内部的类。 嵌套类存在的目的是:只是为它的外部类提供服务; outer.java里面定义了一个内部类inner,运行时,一旦编译成功,就会生成两个完全不同的.class文件,分别是outer.class和outer$inner.class。 嵌套类分为四种:静态成员类,非 阅读全文

posted @ 2018-09-28 16:49 AoTuDeMan 阅读(821) 评论(0) 推荐(0)

线程池的内部实现
摘要:上一篇文章讲了线程池的基本用法和一些使用技巧,这篇文章就继续深入的了解线程池,看看常用的线程池的内部实现,话不多说,开始: 对于几个核心的线程池,无论是newFixedThreadPool(int nThreads),newSingleThreadExecutor()和newCacheedThrea 阅读全文

posted @ 2018-09-28 09:25 AoTuDeMan 阅读(553) 评论(0) 推荐(0)

线程池
摘要:多线程的软件设计方法确实可以最大限度的发挥现代多核处理器的计算能力,提高生产系统的吞吐量和性能。但是,若不加控制和管理的随意使用线程,对系统的性能反而会产生不利的影响。 首先,虽然与进程相比,线程是一种轻量级的工具,但是其创建和关闭依然需要花费时间,如果为每一个小的任务都创建一个线程,很有可能出现创 阅读全文

posted @ 2018-09-26 17:24 AoTuDeMan 阅读(443) 评论(0) 推荐(0)

线程阻塞工具类:LockSupport
摘要:LockSupport是一个非常方便实用的线程阻塞工具,它可以在线程内任意位置让线程阻塞。和Thread.suspend()相比,它弥补了由于resume()在前发生,导致线程无法继续执行的情况;和 Object.wait()相比,它不需要先获取某个对象的锁,也不会抛出InterruptedExce 阅读全文

posted @ 2018-09-26 10:52 AoTuDeMan 阅读(365) 评论(0) 推荐(0)

CountDownLatch(倒计时器)、CyclicBarrier(循环栅栏)
摘要:CountDownLatch(): CountDownLatch是一个非常实用的多线程控制工具类,这个工具通常用来控制线程等待,它可以让某一个线程等到倒计时结束,再开始执行。 CountDownLatch的构造函数接收一个整数为参数,即当前这个计数器的计数个数。 下面演示下CountDownLatc 阅读全文

posted @ 2018-09-25 17:34 AoTuDeMan 阅读(495) 评论(0) 推荐(0)

ReentrantReadWriteLock(读写锁)
摘要:ReentrantReadWriteLock是JDK5中提供的读写分离锁。读写分离锁可以有效的帮助减少锁的竞争,以此来提升系统的性能。用锁分离的机制来提升性能也非常好理解,比如线程A,B,C进行写操作,D,E,F进行读操作,如果使用ReentrantLock或者synchronized关键字,这些线 阅读全文

posted @ 2018-09-25 15:30 AoTuDeMan 阅读(348) 评论(0) 推荐(0)

ReentrantLock(重入锁)的好搭档:Condition 条件
摘要:如果大家理解了Object.Wait()和Object.notify()方法的话,那么就会很容易的了解Condition对象了;它和wait()和notify()方法的作用是一致的,但是wait()和notify()是和synchronized关键字合作使用的,而Condition是和Reentra 阅读全文

posted @ 2018-09-25 10:45 AoTuDeMan 阅读(1265) 评论(0) 推荐(0)

ReentrantLock
摘要:ReentrantLock可以完全替代synchronized关键字,在Java1.5之前,ReentrantLock的性能远远好与synchronized,在1.5之后,Java1.6开始,JDK在synchronized上做了大量的优化,使得两者的性能差距并不大,但是在使用的灵活性上,Reent 阅读全文

posted @ 2018-09-21 16:54 AoTuDeMan 阅读(372) 评论(0) 推荐(0)

synchronized
摘要:线程安全是并行程序的根本和根基。一般来说,程序的并行化是为了获取更高的执行效率,但前提是,高效率不能以牺牲正确为代价。 先看下面这种情况: 上述代码运行多次发现,输出都比20000小,我们用两个线程去各自累加10000次。这就是多线程中的线程不安全问题。 分析一下产生这种情况的原因: 两个线程同时读 阅读全文

posted @ 2018-09-20 15:15 AoTuDeMan 阅读(443) 评论(0) 推荐(0)

volatile
摘要:volatile英文解释为:易变的,不稳定的。这也就是volatile在Java关键字中的语义。 当你用volatile去申明一个变量时,就等于告诉了虚拟机,这个变量极有可能会被某些程序或者线程修改。为了确保这个变量被修改后,应用程序范围内的所有线程都能够“看到”这个改动,虚拟机就必须采取一些特殊的 阅读全文

posted @ 2018-09-19 21:45 AoTuDeMan 阅读(1196) 评论(0) 推荐(0)

线程等待(wait)、通知(notify)、等待线程结束(join)和谦让(yield)
摘要:线程等待(wait)、通知(notify) 为了支持多线程之间的协作,JDK提供了两个非常重要的接口:线程等待wait()和通知notify()方法。这两个方法并不是在Thread类中的,而是Object类,这也就意味着任何对象都可以调用者两个方法,下面来看这两个方法的签名: 当在一个对象实例上调用 阅读全文

posted @ 2018-09-19 14:40 AoTuDeMan 阅读(1080) 评论(0) 推荐(0)

线程中断
摘要:在Java中,线程中断是一种重要的线程协作机制,从表面上来看,中断就是让目标线程停止执行的意思,实际上却并非如此。 严格上讲,线程中断并不会使线程立即退出,而是给线程发送一个通知,告知目标线程,有人希望你退出了。至于目标线程接到通知后如何处理,则完全由目标线程自行决定。这点很重要,如果中断后,线程立 阅读全文

posted @ 2018-09-18 17:35 AoTuDeMan 阅读(297) 评论(0) 推荐(0)

JMM(Java Memory Model)、原子性、可见性,有序性
摘要:由于并发程序比串行程序复杂得多,其中一个重要原因是在并发程序下数据访问的一致性和安全性将会受到严重的挑战。我们需要在深入了解并行机制的前提下,再定义一种规则,保证多个线程间可以有效的,正确的协同工作。JMM就是为此而生的。 JMM的关键技术点都是围绕着多线程的原子性、可见性和有序性来建立的,下面我们 阅读全文

posted @ 2018-09-18 14:09 AoTuDeMan 阅读(676) 评论(0) 推荐(0)

并发级别
摘要:由于临界区的存在,多线程之间的并发必须受到控制,根据控制并发的策略,我们可以把并发的级别分类,大致上可以分为阻塞,无饥饿,无障碍、无锁、无等待几种。 1 阻塞 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。比如:使用synchronize关键字或者其他重入锁,我们得到的就是阻塞 阅读全文

posted @ 2018-09-14 16:17 AoTuDeMan 阅读(1074) 评论(0) 推荐(0)

并发的一些概念
摘要:1.同步(Synchronous)和异步(Asynchronous) 同步和异步通常用来形容一次方法的调用,同步方法一旦开始,调用者就必须要等到方法调用返回后,才能继续后续的行为;异步方法更像是一个消息的传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作,而异步方法通常会在另外一个线程 阅读全文

posted @ 2018-09-14 16:16 AoTuDeMan 阅读(635) 评论(0) 推荐(0)

单例模式以及如何强化单例属性
摘要:特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这个实例。优点:提供了对唯一实例的受控访问;由于系统内存中只存在一个对象,因此可节约系统的资源,对于一些频繁的创建和销毁的对象,单例模式可以提升系统的性能。单例模式可以避免对资源的多重占用,例如一个写文件操作, 阅读全文

posted @ 2018-09-12 15:49 AoTuDeMan 阅读(775) 评论(0) 推荐(0)

Java(JNA)调用C++动态库(dll)
摘要:JNA(Java Native Access):是建立在JNI之上的Java开源框架,SUN主导开发,用来调用C、C++代码,尤其是底层的库文件(windows中叫dll文件,linux下是.so文件)。 先注意几个问题: 1.下载jna.jar包,jna-platform.jar 可以不要,但是有 阅读全文

posted @ 2018-09-09 17:06 AoTuDeMan 阅读(4780) 评论(0) 推荐(0)

导航