什么是线程安全性:要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。“共享”意味着变量可以由多个线程同时访问,而“可变”则意味着变量的值在其生命周期内可以发生变化。一个对象是否需要线程安全的,取决于他是否被多个线程..
分类:
编程语言 时间:
2014-05-27 03:32:21
阅读次数:
256
java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同《java并发编程实践》中所说:写道给线程安全下定义比较困难。存在很多种定义,如:“一个类在可以被多个线程安全调用时就是线程安全的”。
静态变量:线程非安全。静态变量即类变量,位于方法区,为所有对...
分类:
编程语言 时间:
2014-05-26 13:30:48
阅读次数:
467
一、什么是线程安全性
编写线程安全的代码
核心在于要对状态访问操作进行管理。
共享,可变的状态的访问 - 前者表示多个线程访问, 后者声明周期内发生改变.
线程安全性
核心概念是正确性。某个类的行为与其规范完全一致。
多个线程同时操作共享的变量,造成线程安全性问题。
* 编写线程安全性代码的三种方法:
不在线程之间共享该状态变量
将状态变量修改为不可变的变量
在访问...
分类:
编程语言 时间:
2014-05-26 05:31:40
阅读次数:
282
继续并发专题~
这次介绍CyclicBarrier:看一眼API的注释:
/**
* A synchronization aid that allows a set of threads to all wait for
* each other to reach a common barrier point. CyclicBarriers are
* useful in program...
分类:
编程语言 时间:
2014-05-25 18:15:06
阅读次数:
316
继续并发专题~
FutureTask 有点类似Runnable,都可以通过Thread来启动,不过FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞。
由于:FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞这两个特性,我们可以用来预先加载一些可能用到资源,然后要用的时候,调用get方法获取(如果资源加载完,直接返回;...
分类:
编程语言 时间:
2014-05-25 07:26:53
阅读次数:
570
最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆。
每天起早贪黑的上班,父母每天也要上班,话说今天定了个饭店,一家人一起吃个饭,通知大家下班去饭店集合。假设:3个人在不同的地方上班,必须等到3个人到场才能吃饭,用程序如何实现呢?
作为一名资深屌丝程序猿,开始写代码实现:
package com.zhy.concurrency.latch;
public...
分类:
编程语言 时间:
2014-05-24 22:29:34
阅读次数:
262
一、可见性
什么是可见性?
Java线程安全需要防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且需要确保当一个线程修改了对象的状态后,其他线程可以看到发生的状态变化。 后者就是可见性的描述即多线程可以实时获取其他线程修改后的状态。
*** 待补充 两个工人同时记录生产产品总数问题
1. 失效数据
可见性出现问题就是其他线程没有获取到修改后的状态,更直观...
分类:
编程语言 时间:
2014-05-24 22:17:11
阅读次数:
246
进程(Process)和线程(Thread)是程序运行的两个基本单元。Java并发编程更多的是和线程相关。
进程
进程是一个独立的执行单元,可将其视为一个程序或应用。然而,一个程序内部同事还包含多个进程。Java运行时环境就是一个单独的进程,在它内部还包含了作为进程的各种类和程序。
线程
可以将线程看做轻量级的进程。线程存在于进程当中,需要的资源开销较小。同一进程中的线程共...
分类:
编程语言 时间:
2014-05-23 00:16:01
阅读次数:
372
Subsections
线程安全(Thread safety)
锁(lock)
共享对象
对象组合
基础构建模块
任务执行
取消和关闭
线程池的使用
性能与可伸缩性
并发程序的测试
显示锁
原子变量和非阻塞同步机制
一、线程安全(Thread safety)
无论何时,只要多于一个线程访问给定的状态变量。而且其中某个线程会写入该变量,此时必须使用同...
分类:
编程语言 时间:
2014-05-21 17:11:45
阅读次数:
500
ReentrantReadWriteLock是一个读写锁,它提供了一个读锁和一个写锁,读锁用于只读操作,而写锁用于写入操作,读操作可以并行进行,而写操作则是互斥的。读锁和写锁的分离在一些写少读多的应用中可以带来性能上的提升,例如:一个hashmap在构造之后很少修改,却经常进行查找操作,这样查找操作就可以并发进行从而提高性能。这篇文章首先为你介绍读写锁的基本特性,在具体应用中需要解决的问题,然后介...
分类:
其他好文 时间:
2014-05-21 16:09:03
阅读次数:
304