
Java 多线程编程
文章平均质量分 79
Java多线程编程,是并发编程的一种(另一种重要的并发编程是多进程编程)。我们写java程序一般是运行在同一个进程中的,所以可以简单的认为:并发编程 = 多线程编程,让写操作系统的人去关注多进程编程吧
张小琦
这个作者很懒,什么都没留下…
展开
-
System.out.println 的多线程并发问题
如果println函数的参数为常量则不会出现线程并发问题,但是如果参数为表达式形式,则JVM在执行println函数的时候会分为几步来执行,从而造成并发问题。原创 2014-10-23 15:41:06 · 8210 阅读 · 0 评论 -
Java 并发编程(四)并发容器
ava 5.0 提供了多种并发容器来改进同步容器的性能。 同步容器是将所有对容器的访问都串行化,以实现他们的线程安全性。代价是严重降低并发行,当多个线程竞争容器的锁时,吞吐量将严重降低。 并发容器是针对多个线程并发访问设计的。 Java 5.0 增加了 ConcurrentHashMap ,用来替代同步且基于散列的 Map ,增加了 CopyOnWriteArrayList ,用于在遍历操作为主要操作的情况下替代同步的 List 。Java 5.0 还增加了两中心的容器类型原创 2014-10-23 14:43:40 · 2608 阅读 · 2 评论 -
Java 并发编程(四)同步容器类
Java 中的同步容器类包括 Vector 和 Hashtable ,二者是早起 JDK 的一部分,此外还包括在 JDK1.2 中添加的一些功能相似的类,这些同步的封装类是由 Collections.synchronizedXxx 等工厂方法创建的的。这些类实现线程安全的方法都是一样的:将他们封装起来,并对每个公有方法都进行同步,使得每次都只有一个线程能访问容器的状态。原创 2014-10-22 22:47:36 · 1483 阅读 · 0 评论 -
SimpleDateFormat 的线程安全问题与解决方案
SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。但是 SimpleDateFormat 并不是一个线程安全的类,在多线程并发访问下会出现问题。通过以下代码进行检验,原创 2014-10-19 17:23:28 · 9441 阅读 · 2 评论 -
Java 并发编程(三)为线程安全类中添加新的原子操作
Java 类库中包含许多有用的”基础模块“类。通常,我们应该优先选择重用这些现有的类而不是创建新的类。:重用能降低开发工作量、开发风险(因为现有类都已经通过测试)以及维护成本。有时候,某个线程安全类能支持我们需要的所有操作,但更多的时候,现有的类只能支持大部分的操作,此时就需要在不破坏线程安全的情况下添加一个新的操作。原创 2014-10-19 09:33:20 · 2071 阅读 · 0 评论 -
Java 并发编程(三)设计线程安全的类-实例封闭
到目前为止,我们已经介绍了关于线程安全与同步的一些基础知识。然而,我们并不希望对每一次内存访问都进行分析以确保是线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组合为更大规模的组件或程序。之后,我们会讲一些设计线程安全类的一些基本概念,介绍一些组合模式。原创 2014-10-18 21:45:03 · 3781 阅读 · 3 评论 -
Java 并发编程(二)对象的不变性和安全的发布对象
满足同步需求的另一种方法是使用不可变对象(Immutable Object)。到目前为止,我们介绍了许多与原子性和可见性相关的问题,例如得到失效数据,丢失更新操作或光查到某个对象处于不一致的状态等等,都与多线程视图同时访问同一个可变的状态相关。如果对象的状态不会改变,那么这些问题与复杂性也就自然消失了。 如果某个对象在被创建后其状态就不能被修改,那么这个对象就被成为不可变对象。线程安全型是不可变对象的固有属性之一,他们的不变性条件是由构造函数创建的,只要他们的状态不改变,那么这些不变性条件就原创 2014-10-12 22:49:46 · 6008 阅读 · 6 评论 -
Java 并发编程(二)对象的发布逸出和线程封闭
“发布(Publish)“一个对象是指使对象能够在当前作用域之外的代码中使用。可以通过 公有静态变量,非私有方法,构造方法内隐含引用 三种方式。 如果对象构造完成之前就发布该对象,就会破坏线程安全性。当某个不应该发布的对象被发布时,这种情况就被称为逸出(Escape)。下面我们首先来看看一个对象是如何逸出的。 发布对象最简单的方法便是将对象的引用保存到一个共有的静态变量中,以便任何类和线程都能看见对象,如下面代码。原创 2014-10-12 19:41:02 · 2808 阅读 · 0 评论 -
Java 并发编程(二)对象的可见性
在第一部分,我们介绍了如果通过同步来避免多个线程在同一时刻访问相同的数据,而这节,我们将介绍如何共享和发布对象,从而使他们能够安全的由多个线程同时访问。这两部分形成了构建线程安全类以及通过 java.util.concurrent 类库来构建并发应用程序的重要基础。原创 2014-10-12 10:49:11 · 2797 阅读 · 0 评论 -
Java 并发编程(一)浅谈线程安全
首先我们要弄清楚什么叫线程安全。 “线程安全”是指:当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。原创 2014-10-11 10:00:12 · 1859 阅读 · 0 评论 -
Vector和List 有关线程安全和线程同步的理解
最近在学习的时候,一直很疑惑Vector和List的两个容器的区别。在网上查了好多资料,原创 2014-05-23 23:30:51 · 9278 阅读 · 1 评论 -
有关线程中断和线程阻塞
一个线程都要从运行到结束都要经过3个阶段: 1、正在运行 2、准备结束运行 3、结束运行那么怎么结束这个线程呢?可以通过下面这三个方法结束一个线程。 1、使用stop()方法强制结束线程。 2、使用thread.interrupt()方法发送中断。 3、在Thread对象中设置共享变量,通过在run方法中不断检测该变量的值来决定是否结束。原创 2014-05-24 15:49:30 · 5522 阅读 · 1 评论