![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程&并发
文章平均质量分 83
zly_2008
做好自己本职工作的同时多多了解世界
展开
-
多线程并发中的简单使用wait和notify的方法
package javautilconcurrent;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 简单使用wait和notify * @author zly * */public class UseWaitAndNotify {原创 2013-08-23 22:11:05 · 422 阅读 · 0 评论 -
多线程和并发中BlockingQueue的使用
package javautilconcurrent;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Exec原创 2013-08-25 20:27:40 · 476 阅读 · 0 评论 -
多线程和并发中SynchronousQueue的使用
package javautilconcurrent;import java.util.Arrays;import java.util.List;import java.util.concurrent.BlockingQueue;import java.util.concurrent.SynchronousQueue;/** * 这是一个阻塞队列,其中,每个插入操作必须等待原创 2013-08-25 21:26:33 · 689 阅读 · 0 评论 -
多线程和并发中新的任务执行架构Executor、ExecutorService、ScheduledExecutorService
package javautilconcurrent;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors原创 2013-08-25 10:34:10 · 757 阅读 · 0 评论 -
Java多线程(四)、线程池
系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互。在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。与数据库连接池类似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象传给线程池,线程池就会启动一条线程来执行该对象的run方法,当run方法执行结束后,该线程并不会死亡,而是再次返回线程池中转载 2013-08-24 15:23:17 · 389 阅读 · 0 评论 -
Java多线程(三)、线程同步
在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系。可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题。现在就来学习多线程对数据访问的控制吧。 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。转载 2013-08-24 15:21:24 · 561 阅读 · 0 评论 -
Java多线程(二)、线程的生命周期和状态控制
一、线程的生命周期线程状态转换图:1、新建状态用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)。注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常。转载 2013-08-24 15:19:40 · 371 阅读 · 0 评论 -
Java多线程(七)、Volatile 关键字
简介: Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的Java 理论与实践 中,Brian Goetz 将介绍几种正确使用 volatile 变量的模式,并针对其适用性限制提出一些建议。Jav转载 2013-08-24 15:29:30 · 335 阅读 · 0 评论 -
Java多线程(六)、ThreadLocal类
一、概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一转载 2013-08-24 15:27:32 · 455 阅读 · 0 评论 -
Java多线程(五)、多线程其他知识简要介绍
一、线程组[java] view plaincopyprint?/** * A thread group represents a set of threads. In addition, a thread * group can also include other thread groups. The thread groups form * a tr转载 2013-08-24 15:24:55 · 484 阅读 · 0 评论 -
Java多线程(一)、多线程的基本概念和使用
一、进程和线程的基础知识1、进程和线程的概念进程:运行中的应用程序称为进程,拥有系统资源(cpu、内存)线程:进程中的一段代码,一个进程中可以有多段代码。本身不拥有资源(共享所在进程的资源)在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程。区别: 1、是否占有资源问题 2、创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大。转载 2013-08-24 15:17:26 · 367 阅读 · 0 评论 -
多线程并发中volatile变量的原理
引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized ,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深原创 2013-08-23 20:51:16 · 497 阅读 · 0 评论 -
多线程并发中ReentrantLock和ReentrantReadWriteLock的使用
package javautilconcurrent;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.locks.Lock;import原创 2013-08-23 13:24:07 · 375 阅读 · 0 评论 -
多线程并发中CopyOnWriteArrayList源码解读
概述CopyOnWriteArrayList是jdk concurrent包中提供的一个非阻塞型的,线程安全的List实现。CopyOnWriteArrayList在进行数据修改时,都不会对数据进行锁定,每次修改时,先拷贝整个数组,然后修改其中的一些元素,完成上述操作后,替换整个数组的指针。对CopyOnWriteArrayList进行读取时,也不进行数据锁定,直接返回需要查询的数据,原创 2013-08-23 14:33:45 · 516 阅读 · 0 评论 -
多线程并发中CopyOnWriteArrayList的使用
除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的)。先回顾一下一个常识:1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CPU时间。2原创 2013-08-23 14:25:05 · 660 阅读 · 0 评论 -
深入理解HashMap
1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表示数组,纵排表示数组元素【实际上是一个链表】)。转载 2013-08-26 21:56:50 · 297 阅读 · 0 评论