Java Concurrency Programming
文章平均质量分 79
FredXQ
I am a software developer,especially java programming.I hope get good communication with everyone in this platform.
展开
-
Java并发编程之十五:线程间通信中notifyAll造成的早期通知问题(含代码)
出处:http://blog.csdn.net/ns_code/article/details/17229601 如果线程在等待时接到通知,但线程等待的条件还不满足,此时,线程接到的就是早期通知,如果条件满足的时间很短,但很快又改变了,而变得不再满足,这时也将发生早期通知。这种现象听起来很奇怪,下面通过一个示例程序来说明问题。 很简单,两个线程等待删除List中的元素,同时转载 2016-10-17 19:55:08 · 189 阅读 · 0 评论 -
Java并发编程之十六:生产者—消费者模型(含代码)
出处:http://blog.csdn.net/ns_code/article/details/17249321 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据“姓名--1 --> 内容--1”,“姓名--2-转载 2016-10-17 19:56:27 · 219 阅读 · 0 评论 -
Java并发编程之十七:深入Java内存模型——happen-before规则及其对DCL的分析
出处:http://blog.csdn.NET/ns_code/article/details/17348313happen—before规则介绍 Java语言中有一个“先行发生”(happen—before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,“影响”转载 2016-10-17 19:58:30 · 223 阅读 · 0 评论 -
Java并发编程之十八:深入Java内存模型—内存操作规则总结
出处:http://blog.csdn.NET/ns_code/article/details/17377197主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。Java内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的转载 2016-10-17 19:59:42 · 258 阅读 · 0 评论 -
Java并发编程之十九:并发新特性—Executor框架与线程池(含代码)
出处:http://blog.csdn.NET/ns_code/article/details/17465497Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化转载 2016-10-17 20:01:20 · 347 阅读 · 0 评论 -
Java并发编程之二十:并发新特性—Lock锁和条件变量(含代码)
出处:http://blog.csdn.NET/ns_code/article/details/17487337简单使用Lock锁 Java 5中引入了新的锁机制——Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作。Lock接口有3个实现它的类:ReentrantLock、ReetrantRe转载 2016-10-17 20:02:39 · 258 阅读 · 0 评论 -
Java并发编程之二十一:并发新特性—阻塞队列和阻塞栈(含代码)
出处:http://blog.csdn.NET/ns_code/article/details/17511147阻塞队列 阻塞队列是Java 5并发新特性中的内容,阻塞队列的接口是Java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、Priority转载 2016-10-17 20:03:38 · 222 阅读 · 0 评论 -
Java并发编程之二十二:并发新特性—障碍器CyclicBarrier(含代码)
出处:http://blog.csdn.NET/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java 5中加入的新特性,使用时需要导入Java.util.concurrent.CylicBarrier。它适用于这样一种情况:你希望创建一组任务,它们并发地执行工作,另外的一个任务在这一组任务并发执行结束前一直阻转载 2016-10-17 20:05:08 · 190 阅读 · 0 评论 -
Java并发编程之二十三:并发新特性—信号量Semaphore
出处:http://blog.csdn.NET/ns_code/article/details/17524153 在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作用,通过对信号量的不同操作,可以分别实现进程间的互斥与同步。当然它也可以用于多线程的控制,我们完全可以通过使用信号量来自定义实现类似Java中的synchronized、wait、not转载 2016-10-17 20:06:10 · 254 阅读 · 0 评论 -
Java并发编程之十:多线程环境中安全使用集合API(含代码)
出处:http://blog.csdn.NET/ns_code/article/details/17200509 在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能转载 2016-10-17 19:48:22 · 186 阅读 · 0 评论 -
多线程编程总结
一、多线程编程基础1.线程安全定义: 当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么这个类就被称之为是线程安全的。简言之对于线程安全类的实例进行顺序或并发的一系列操作,都不会导致实例处于无效状态。 只有对象状态可变,且存在对象共享,才需要考虑线程安全。转载 2016-11-18 10:13:13 · 1014 阅读 · 0 评论 -
Java并发编程之十四:线程间通信中notify通知的遗漏(含代码)
出处:http://blog.csdn.net/ns_code/article/details/17228213 notify通知的遗漏很容易理解,即threadA还没开始wait的时候,threadB已经notify了,这样,threadB通知是没有任何响应的,当threadB退出synchronized代码块后,threadA再开始wait,便会一直阻塞等待,直到被别的线程转载 2016-10-17 19:53:53 · 303 阅读 · 0 评论 -
Java并发编程之十三:使用wait/notify/notifyAll实现线程间通信的几点重要说明
出处:http://blog.csdn.NET/ns_code/article/details/17225469 在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中调用noti转载 2016-10-17 19:52:50 · 240 阅读 · 0 评论 -
Java并发编程之三:线程挂起、恢复与终止的正确方法
出处:http://blog.csdn.NET/ns_code/article/details/17095733挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但转载 2016-10-17 10:18:21 · 483 阅读 · 0 评论 -
Java并发编程之二:线程的中断
出处:http://blog.csdn.NET/ns_code/article/details/17091267使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt(转载 2016-10-17 10:15:31 · 251 阅读 · 0 评论 -
Java并发编程之四:守护线程和线程阻塞
出处:http://blog.csdn.NET/ns_code/article/details/17099981 守护线程 Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便转载 2016-10-17 10:19:55 · 202 阅读 · 0 评论 -
Java并发编程之五:Volatile关键字(上)
出处:http://blog.csdn.NET/ns_code/article/details/17101369 volatile用处说明 在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java转载 2016-10-17 10:21:41 · 488 阅读 · 0 评论 -
Java并发编程之六:Volatile关键字(下)
出处:http://blog.csdn.NET/ns_code/article/details/17382679 在《Java并发编程学习笔记之五:volatile变量修饰符—意料之外的问题》一文中遗留了一个问题,就是volatile只修饰了missedIt变量,而没修饰value变量,但是在线程读取value的值的时候,也读到的是最新的数据。但是在网上查了很多资料都无果转载 2016-10-17 10:23:26 · 290 阅读 · 0 评论 -
Java并发编程之一:多线程的两种实现
文章出处:http://blog.csdn.NET/ns_code/article/details/17161237Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 1、可以避免由于Java的单继承特性而带来的局转载 2016-10-17 10:01:45 · 214 阅读 · 0 评论 -
Java并发编程之七:使用synchronized获取互斥锁
出处:http://blog.csdn.NET/ns_code/article/details/17199201 在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。 采用转载 2016-10-17 10:27:53 · 424 阅读 · 0 评论 -
Java并发编程之八:synchronized的另个一重要作用:内存可见性
出处:http://blog.csdn.net/ns_code/article/details/17288243 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性。我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且还希望确保当一个线程修改了对象状态后,其他线程能够看到该变化。而线程的同步恰恰也转载 2016-10-17 19:45:31 · 255 阅读 · 0 评论 -
Java并发编程之九:实现内存可见性的两种方法比较:synchronized和Volatile
出处:http://blog.csdn.net/ns_code/article/details/17290021 在http://blog.csdn.net/ns_code/article/details/17288243这篇博文中,讲述了通过同步实现内存可见性的方法,在http://blog.csdn.net/ns_code/article/details/171013转载 2016-10-17 19:47:05 · 241 阅读 · 0 评论 -
Java并发编程之十一:死锁(含代码)
出处:http://blog.csdn.NET/ns_code/article/details/17200937 当线程需要同时持有多个锁时,有可能产生死锁。考虑如下情形: 线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2。接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持有lock2,因此线程A会阻塞等待线程B对lock2的释放。转载 2016-10-17 19:50:05 · 208 阅读 · 0 评论 -
Java并发编程之十二:可重入内置锁
每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。 当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果摸个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味转载 2016-10-17 19:51:21 · 152 阅读 · 0 评论 -
Java 多线程编程总结
一、多线程编程基础1.线程安全定义: 当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么这个类就被称之为是线程安全的。简言之对于线程安全类的实例进行顺序或并发的一系列操作,都不会导致实例处于无效状态。 只有对象状态可变,且存在对象共享,才需要考虑线程安全。原创 2016-12-23 18:38:45 · 961 阅读 · 0 评论