Java并发解决方案 java.util.concurrent
来源:互联网 发布:mysql转换日期格式 编辑:程序博客网 时间:2024/06/16 05:30
多线程编程是很美好同时又很复杂的一件事情。美好在于它能有效提高对CPU资源利用率,并且可以较快的得到结果,但同时复杂、晦涩的逻辑关系常常令程序员头疼不已。幸好在JDK1.5以后sun公司提供了java.util.concurrent包,使我们的并发编程的负担大大降低。下面我就简明扼要介绍这个包。
1.为我们提供了线程池框架->Executor.
Executor框架是这个包中最大的亮点,它为我们写好了线程池的实现,我们只需要使用Executors提供的方法进行静态调用即可,当然也可以使用ThreadPoolExecutor和ScheduledThreadPoolExecutor进行构造调用。
下图为Executor框架的UML图
从上图可以看出,Executor使用工厂模式进行设计,在Executor接口中只有execute()方法,ExecutorService接口是对上层接口Executor的包装,AbstrarctExecutorService实现了ExecutorService的方法,而ThreadPoolExecutor和ScheduledThreadPoolExecutor是对外提供的API。
其中Executors类里面有三个主要的方法。
(1) public static ExecutorService newSingleThreadExecutor()返回新创建的单线程执行程序。返回的线程不能重新配置使用。
(2) public static ExecutorService newCachedThreadPool() 返回新创建的线程池,将重用以前构造的线程(如果有) 如果没有现有的线程可用,一个新的线程将被创建并添加到池中。
(3) public static ExecutorService newFixedThreadPool(int nThreads)返回新创建固定数目的线程池。在任何时候,至多nThreads 个线程将处于活动状态。
2.在concurrent.atomic下提供了各种原子操作类。包括AtomicBoolean、AtomicInteger等。原子操作是线程安全的,因为原子操作作为最小单元操作行为,它是不可以被分割的。以往被synchronized修饰的代码块,就可以看做是一次原子操作
3.concurrent.locks为我们提供了显式控制进程同步的类。以往的我们控制线程同步的方式,大多数情况下是使用synchronized修饰的同步方法或者同步代码块,我们不会知道jvm在何时上的锁,又在何时释放锁,所以这是隐式上锁。使用Lock我们可以直观的看到上锁、释放锁。
就如同这样
Lock lock = new ReentrantLock() try{ lock.lock(); dosometing.... }finally{ lock.unlock(); }
这种显式上锁、释放锁虽然比较直观,但是相对于synchronized方式显然增加了代码量,并且一定要释放锁,否则这块代码会一直处于上锁的状态。
4.提供了大量的、线程安全的、可以在并发环境下使用的容器,比如ConcurrentHashMap、CopyOnWriteArrayList、
CopyOnWriteArraySet、ArrayBlockingQueue,这些类的迭代器是fail-safe(安全失败),即在一个线程迭代容器元素时 另一个线程操作本容器(
修改、删除..)不会造成java.util.ConcurrentModificationException(同步修改异常)。
5.提供了大量同步环境下使用的工具类,比如CountDownLatch(计数器)、CyclicBarrier(调度线程)、TimeUnit(时间工具类)等等,
- Java并发解决方案 java.util.concurrent
- java.util.concurrent 并发处理
- java.util.concurrent并发集合
- [并发]java.util.concurrent并发工具包
- java并发编程:java.util.concurrent
- Java 并发工具包 java.util.concurrent 用户指南
- Java并发工具包java.util.concurrent用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- java并发编程(3)--java.util.concurrent.*
- Java 并发工具包 java.util.concurrent 大全
- java.util.concurrent - Java并发工具包
- Java 并发工具包 java.util.concurrent 用户指南
- java并发包java.util.concurrent
- Java 并发工具包 java.util.concurrent
- Error LNK2001 无法解析的外部符号 的几种情况及解决办法
- CSDN-markdown编辑器
- bootstrap的datepicker在选择日期后调用某个方法
- Java VisualVM 插件地址
- android加载大图滑动浏览OOM异常解决
- Java并发解决方案 java.util.concurrent
- 【清北学堂】dwarf
- STORM入门之(集成KafkaSpout)
- Object.create()详解
- linux平台下防火墙iptables原理
- SpringMVC配置全局日期转换器
- 【POJ-2407】Relatives
- @Resource和@Autowired区别
- Q:JButton的setText()方法设置按钮文本,结果按钮上显示的全是"..."