
多线程2
liucw_cn
喜爱java
展开
-
ConcurrentHashMap01--(Happens-Before规则)
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get操原创 2017-09-03 19:19:28 · 954 阅读 · 0 评论 -
单例模式与多线程
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处: 1.)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 2.)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3.)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比原创 2017-08-27 22:22:41 · 860 阅读 · 0 评论 -
多线程多个实例
顺序打印3次ABC 正常的情况下,线程在运行时多个线程之间执行任务的时机是无序的。可以通过改造代码的方式使它们运行具有有序性。public class MyThread extends Thread { private Object lock; private String showChar; private int showNumPosition; private原创 2017-08-27 21:22:47 · 945 阅读 · 0 评论 -
java线程基础知识
一、java线程概念和原理1.1、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程原创 2017-08-26 20:30:45 · 1086 阅读 · 0 评论 -
Java多线程之Lock的使用--重入锁(ReentrantLock)、Condition、公平锁和非公平锁、ReentrantReadWriteLock的使用(读写锁)
一、ReentrantLock的使用 在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定、多路分支通知等功能,而且在使用上也比synchronized更加的灵活。 1、使用ReentrantLock实现同步 既然ReentrantL原创 2017-08-27 20:35:54 · 2570 阅读 · 0 评论 -
Java多线程之通过管道线程间通信(字节流、字符流),类ThreadLocal与类InheritableThreadLocal的使用
一、通过管道线程间通信(字节流、字符流) 在Java语言中提供了各种各样的输人/输出流Stream,使我们能够很方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输人管道中读数据。通过使用管道,实现不同线程间的通信,而无须借助于类似临时文件之类的东西。 在Java的JDK中提供了4个类来使线程间可以进原创 2017-08-27 16:45:26 · 2063 阅读 · 0 评论 -
Java多线程之线程间通信--等待(wait)/通知(notify)机制,等待/通知之交叉备份实例
1、什么是等待/通知机制 等待/通知机制在生活中比比皆是,比如在就餐时就会出现,如图所示。 厨师和服务员之间的交互要在“菜品传递台”上,在这期间会有几个问题: 1).厨师做完一道菜的时间不确定,所以厨师将菜品放到‘菜品传递言,上的时间也不确定。 2).服务员取到菜的时间取决于厨师,所以服务员就有“等待”(wait)的状态。 3).服务员如何能取到菜呢?这又得取决原创 2017-08-27 15:45:21 · 1174 阅读 · 0 评论 -
Java多线程之线程间通信--生产者/消费者模式
等待(wait)/通知(notify)模式最经典的案例就是“生产者/消费者”模式。虽然此模式在使用上有几种“变形”,还有一些小的注意事项,但原理都是基于wait/notify的。public class Storage { //仓库最大存储量 private final int MAX_SIZE = 10; // 仓库存储的载体 private LinkedList<原创 2017-08-27 16:01:52 · 625 阅读 · 0 评论 -
Java多线程之同步锁定--synchronized同步方法和同步块、脏读、锁重入、死琐
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。一、同步注意事项1.1、方法内的变量为线程安全 “非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题(这是方法内部的变量是私有的特性造成的,所得结果也就是“线程安全”的了,方法的变量存放在JVM里的虚拟机栈里)。2、实例变量非线程安全 如果多个线程共同访问1个对象中的实例变量,则可能原创 2017-08-27 12:09:59 · 2628 阅读 · 0 评论 -
停止线程
停止线程 停止线程是在多线程开发时很重要的技术点,掌握此技术可以对线程的停止进行有效的处理。停止线程在Java语言中并不像break语句那样干脆,需要一些技巧性的处理。 使用Java内置支持多线程的类设计多线程应用是很常见的事情,然而,多线程给开发人员带来了一些新的挑战,如果处理不好就会导致超出预期的行为并且难以定位错误。 停止一个线程意味着在线程处理完任务之前停掉正在做的操作,也就是原创 2017-08-26 22:02:37 · 1097 阅读 · 0 评论 -
Java多线程之同步锁定--volatile关键字、原子类
使用volatile关键字增加了实例变量在多个线程之间的可见性。但volatile关键字最致命的缺点是不支持原子性。 下面将关键字synchronized和volatile进行一下比较: 1.)关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随原创 2017-08-27 14:28:11 · 1474 阅读 · 0 评论