- 博客(12)
- 资源 (2)
- 收藏
- 关注
原创 Java同步容器与并发容器
Java容器Java提供了很多容器类,方便用户使用。关键接口图如下(图片来源自The Java™ Tutorials), Collection——集合框架结构的根节点。Java并没有提供该接口的具体实现,但是提供了Collection子接口,比如Set,List的具体实现。本篇博客大纲,1. 介绍java 容器类2. 介绍Java同步容器类,并介绍其可能出现的问题2. 简单介绍下Java并发容器
2016-08-29 18:15:03 861
原创 Java并发编程番外篇(三)volatile变量、happens-before与内存一致性错误
Java并发编程番外篇(三)volatile变量、happens-before与内存一致性错误volatile变量volatile是Java的关键词,我们可以用它来修饰变量或者方法。为什么要使用volatilevolatile的典型用法是,当多个线程共享变量,且我们要避免由于内存缓冲变量导致的内存一致性(Memory Consistency Errors)错误时。考虑以下的生产者消费者例子,在一个时
2016-08-22 23:08:48 1657 1
原创 Java并发编程番外篇(二)happens-before关系
在Java 并发编程(三)同步中,提到了内存一致性错误,而避免内存一致性错误的关键就是了解happens-before关系。那么什么是happens-before关系呢?如何判断两个操作是否存在happends-before关系呢?本文将来介绍这两个方面。1. happens-before关系Wikipedia, Happened-before是这样定义的: In computer scienc
2016-08-21 23:01:48 2921 2
原创 Android多进程使用及其带来的问题
本文介绍Android程序如何使用多线程,为什么要使用多进程,并说明了使用多进程可能会出现的一些问题。1. Android程序如何使用多进程根据Processes and Threads,默认情况下,一个Android程序的所有组件都是在一个进程中执行的,该进程的名字就是程序的包名。同时,Android也允许开发者将程序的一些组件在其他进程中执行。四大组件均支持android:process属性,我
2016-08-21 16:46:15 5221
翻译 Java并发编程(七)高级别并发对象
7. 高级别并发对象到目前为止,本课程介绍了一些Java平台初学者必须的低级别API。在本节,我们将要介绍Java平台5.0引入的一些高级别并发特性。包括Lock,Executors,并发集合,原子变量和ThreadLocalRandom等知识。
2016-08-20 15:25:53 2140
翻译 Java并发编程(六)不可改变对象
6. 不可改变对象如果一个对象在创建后不可改变,那么就称之为不可改变对象。基于不可变对象被广泛接受为创建简单、可靠代码的有效策略。不可变对象在并发程序中显得尤为重要。由于它们不能改变,所以他们不会在线程干扰中出现错误,并且不会出现非一致性状态。开发者并不太原因使用不可变对象,他们担心创建对象的开销比更新一个现有对象的开销大。创建对象的开销经常被夸大,并且可以被不可变对象带来的效率弥补。这包括由于垃圾
2016-08-16 10:06:02 2901
翻译 Java并发编程(五)保护块
5. 保护块线程通常需要协调任务。最常用的协调方法是保护块(guarded block)。这样一个块以一个条件开始,如果该条件为真,则该块的代码得以执行。这样做需要遵循一些步骤。假设,guardedJoy是一个方法,该方法不会执行直到另一个线程设置joy变量的值。理论上,这样的方法可以简单地循环直到条件符合。然而,循环是浪费资源的,因为当等待的时候,它也继续执行。public void guarde
2016-08-15 21:28:28 537
翻译 Java并发编程(四)活跃度
4. 活跃度一个并发应用及时执行的能力称作活跃度。本节介绍最常见的活跃度问题,死锁,然后继续简单介绍两种其他的活跃度问题,饥饿和活锁。4.1 死锁死锁介绍了两个或者多个线程永远阻塞、彼此等待的情形。这是一个例子, Alphonse和Gaston是朋友,并且彼此很有礼貌。一个礼貌的严格规定是,当你鞠躬的时候,你必须保持一直鞠躬,直到你朋友结束鞠躬。然而,这却没有考虑两个朋友可能在相同时刻都向对方鞠躬
2016-08-15 12:07:38 1141
翻译 Java并发编程(三)同步
Java并发编程(三)同步3. 同步线程主要通过共享内存(成员变量)来进行通信。这种形式的交流很有效率,但是可能会导致两种错误:线程接口和内存一致性错误。预防这些错误的方式就是同步。本文介绍线程干扰、内存一致性错误、同步化方法、隐式锁和同步、原子操作等内容。
2016-08-15 10:21:04 617
原创 Java并发编程番外篇(一)如何结束一个线程
本篇博客介绍下如何结束一个线程。在Java 的设计中,当一个线程的run方法中代码执行结束后,该线程就自动结束了。但是,在我们的实际开发过程中,可能会需要手动的结束一个线程,此时我们应该怎么安全地结束一个线程呢?1. stop方法根据Java的官方文档,Java Thread,该方法已被弃用。文档给出的解释是,该方法不安全,使用stop方法结束一个线程会导致该线程释放所有占有的锁。如果这些锁保护的一
2016-08-12 08:37:00 1949
翻译 Java并发编程(二)多线程编程
在上一节,我们介绍了进程与线程的概念,接下来介绍如何使用多线程(暂不介绍多进程)。Thread对象每个线程都对应一个Thread实例,存在两种策略使用Thread类来创建并发程序。直接进行线程的创建和管理,也就是当需要开启一个异步任务时,实例化一个Thread对象。抽象线程管理,将执行任务交给执行器。本节介绍如何使用Thread类。定义和执行新的线程在创建新线程的时候,我们需要指定该线程运行的
2016-08-10 17:38:38 651
翻译 Java 并发编程(一)进程与线程
本篇博客介绍下进程与线程的区别。 在现有的并发编程中,有两个重要的执行单元:进程与线程。在Java变成语言中,与并发编程相关的通常是线程。然而,进程也同样重要。一个计算机系统通常会有许多的活动进程和线程。即使当系统只有一个执行内核时(也就是在一个给定的时间,只有一个线程在运行),该系统也支持多个进程与线程。单一内核的执行时间被进程和线程共享,该特性我们称之为时间片(time slicing)。计算
2016-08-10 16:17:41 395
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人