java concurrency
文章平均质量分 75
sam-fat-chang
这个作者很懒,什么都没留下…
展开
-
java 并发编程(二)之synchronized实例
“java 并发编程(六)之synchronized”介绍了java控制“临界区”访问的第一种方法“synchronized”,上节讲到synchronized方式主要注意这么几点 1、临界区的概念; 2、临界区的重入; 3、synchronized修饰静态方法的特殊性,如果静态方法也修改了“临界区”的公共资源,那么要注意,可能会出现并发问题; 这里我举出了个synchronized的使用原创 2015-02-06 15:58:19 · 579 阅读 · 0 评论 -
java线程状态——死锁
参考: java 线程状态 java 线程状态——情况续说 java线程状态——java线程状态图 死锁,概念有很多,可以google 现在列出死锁的模拟代码和jstack的输出 一方面是理解死锁,一方面是学习jstack找出死锁,进行代码调优 import java.util.concurrent.TimeUnit; public class e {原创 2017-02-14 17:11:31 · 1904 阅读 · 0 评论 -
java线程状态——java线程状态图
java线程状态图,网上有很多资源,无外乎两种,如下: 图一 图二 图二是比较多的,可以看出来我贴出的链接这个博主挺有心的,还把右下角的水印给抹去了,赤裸裸的伪原创心理呀。 还有几张图说的也挺不错的,链接如下: 挺不错的图 这个链接除了图以外,还要注意作者的分类方式,通过层层递进完善这张图,很不错。 还有一张图是我最欣赏的,不仅列出了状态,还把状态的触发条原创 2017-02-14 17:03:08 · 1365 阅读 · 0 评论 -
java 线程状态——情况续说
参考链接: java 线程状态 situation1/2使得线程状态从RUNNING转化为WAITING/TIMED_WAITING 还有一种情况就是IO阻塞,例子如下: import java.util.concurrent.ArrayBlockingQueue; public class c { private static ArrayBlockingQueue原创 2017-02-14 16:46:35 · 694 阅读 · 0 评论 -
java 线程状态
java定义的线程状态:NEW/RUNNABLE/WAITING/TIMED_WAITING/BLOCKED/TERMINATED java的线程方法使得线程的状态转换如下: 1 sleep RUNNING--->TIMED_WAITING 2 join原创 2017-02-14 16:13:36 · 778 阅读 · 0 评论 -
JAVA wait(), notify(),sleep()详解
在JAVA中,是没有类似于PV操作、进程互斥等相关的方法的。JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白这个原理,就能理解为什么synchron转载 2014-12-29 17:13:45 · 563 阅读 · 0 评论 -
并发多阶段任务的执行——Phaser
java并发API从java7提供了并发多阶段任务的抽象Phaser。如果我们有并发任务且需要分段执行的时候 我们可以考虑Phaser这个类。 Phaser有一个特别的地方,即不需要处理InterruptedException除了(awaitAdvanceInterruptibly(int phaser)方法) 我们模拟一种场景: 我们有三个任务,分别从三个不同的文件夹及其子文件夹原创 2015-04-08 19:01:55 · 1042 阅读 · 0 评论 -
线程同步辅助类——Exchanger
以下是java6中文API对Exchanger的解释: 可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。 用法示例:以下是重点介绍的一个类,原创 2015-04-01 13:32:42 · 745 阅读 · 0 评论 -
java 并发编程(四)之临界区中使用条件
我们可以使用synchronized机制实现线程同步,通过保证“临界区”的访问顺序来保证共享资源状态的正确性。 然而,更多情况是我们不仅需要获得对“临界区”的访问,在获得访问权限后也要判断更多的条件来确定是否 要做出后续的操作。 典型的问题就是“生产者-消费者”问题,当生产者A获得对缓存的访问后,还要判断目前缓存是否可以生产, 否则的话就要让出时间片,等待合适的实际。 我们通过代码来进行原创 2015-02-12 09:14:58 · 539 阅读 · 0 评论 -
java 并发编程(三)之synchronized
上两个章节:java 并发编程(一)之synchronized、java 并发编程(二)之synchronized实例 中讲解了synchronized关键字对同步的控制以及演示了在修饰方法的例子。 我们会发现添加synchronized关键字的方法能够完成多个线程对于同一个方法的同步,但显然不是很好的实现,因为首要 问题就是“效率”,很明显,我们采用高并发设计程序目的就是最大限度的利用原创 2015-02-11 09:15:49 · 645 阅读 · 0 评论 -
java原子变量
变量的赋值代码体现为一条语句,但是对应的虚拟机编译后的字节码就可能是多条语句。因此,在多线程环境下,单个变量的赋值可能会出现意想不到的问题。 java5后增加了“原子变量”的概念,目前支持的“原子变量”有AtomicInteger、AtomicLong、Integer和Long的“原子数组”变量AtomicIntegerArray和AtomicLongArray。 这些原子变量实现的原理是被称原创 2015-01-20 17:28:50 · 2318 阅读 · 1 评论 -
线程同步辅助类—CountDownLatch
CountDownLatch在包java.util.concurrent下,是一个“线程同步辅助类”,它的语义是:等待多个并发事件的完成! 下面我用程序描述下他的用法,程序的语义是这样的: VideoConference是一个类,描述一场视频会议,Member是一个类,描述这场视频会议与会的人员,视频会议输出开始,此时等待所有的与会人员, 当所有的与会人员到达后,输出启动原创 2015-01-20 13:40:32 · 538 阅读 · 0 评论 -
java 并发编程(一)之synchronized
对“共享资源”的访问为了保证正确性,引入了“临界区”的概念(critical section) 对于“临界区”的访问java通常使用synchronized和锁进行。 对于“临界区”的访问策略是,当线程A要访问“临界区”时会先进行判断,如果该“临界区”中有其他的线程存在,那么线程A将休眠等待获得访问许可。 java中,被synchronized修饰的对象将是线程安全的,换句话说: java原创 2015-02-06 11:38:44 · 481 阅读 · 0 评论 -
java线程状态——jstack的应用
jstack是java提供的查询jvm栈信息的小工具。 在之前的文章中已经广泛的使用它,文章参考如下: java 线程状态 java 线程状态——情况续说 java线程状态——java线程状态图 java线程状态——死锁 当我们要使用jstack时,不可避免的重要入参就是pid(jvm的启动进程) 我们可以通过jps完成这个工作,jps有四个操作选项,qvml 其实原创 2017-02-14 17:19:02 · 670 阅读 · 1 评论