同步代码块是一种有效实现操作原子性的方法,上一章我们讲了一些同步的原子操作的基础。
现在我们回忆一下上一章的两个问题。
1:不同的synchronized的写法有什么区别,又该怎么写创建线程的代码呢?
以class实例对象作为锁的写法
写法1
package com.home.thread;
/**
* @author gaoxu
*
*/
public class SafeT...
分类:
编程语言 时间:
2015-01-20 23:57:52
阅读次数:
393
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》的学习笔记。
一个简单的例子
两个线程,一个不断打印a,一个不断打印b
public class LockTest {
public static void main(String[] args){
final Outputer outputer = new Outputer();
n...
分类:
编程语言 时间:
2015-01-20 18:09:25
阅读次数:
157
(一)java内存区域概况
jvm运行java程序时把所管理的内存分成几个部分:方法区、java栈、本地方法栈、java堆、pc程序计数器。
class字节码装载解析后,在多线程环境中,方法区和java堆数据共享,每个线程自带pc程序计数器和java栈,栈帧中包含方法的所有状态(局部变量、传参、返回值、运算中间结果等)。对共享数据需要考虑多线程并发问题。
更详细内容可参考《深入理解JVM虚拟...
分类:
编程语言 时间:
2015-01-20 10:34:31
阅读次数:
222
此篇文章写的是JDK1.5升级版的生产者和消费者。
Java 升级之后的解决方法:
Lock
java.util.concurrent.locks
接口 Lock
所有已知实现类: ReentrantLock,
ReentrantReadWriteLock.ReadLock,
ReentrantReadWriteLock.WriteLock...
分类:
编程语言 时间:
2015-01-19 22:41:28
阅读次数:
256
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》视频的学习记录。
为什么需要并发池
之前写并发的时候
new Thread(new Runnable(){
public void run{
//....
}
}).start();没有什么问题呀,为什么需要并发池呢?
我们拿tomcat来举个例子。每次我们对服务器做一个请求,tomcat就得分出一个线...
分类:
编程语言 时间:
2015-01-19 19:09:52
阅读次数:
260
生产者和消费者问题是多线程通信的经典问题。这类问题描述了这样一种情况:假设有一个仓库,用来存储产品,有生产者负责生产产品,有消费者负责消费。生产者生产的产品存放在仓库之中,消费者从仓库之中取出产品。显然这是一个同步问题,生产者和消费者共享同一资源,并且生产者和消费者之间彼此依赖,互为条件向前推进。那么,该如何编写代码来实现呢?
class Resource {
private String...
分类:
编程语言 时间:
2015-01-19 17:15:55
阅读次数:
251
class Res {
String name;
String sex;
}
class Input implements Runnable {
private Res r;
public Input(Res r) {
// TODO Auto-generated constructor stub
this.r = r;
}
public void run() {
i...
分类:
编程语言 时间:
2015-01-18 22:49:16
阅读次数:
322
在前面我们已经介绍了多线程编程中使用同步机制的重要性,并学会了如何实现同步的方法来正确的访问共享资源。这些线程之间的关系是平等的,批次之间并不存在依赖,他们各自竞争CPU的资源,互不相让,并且还无条件的阻止其他线程对共享资源的访问。然而,也有很多现实问题要求不仅仅要同步的访问同一共享资源,而且线程间还彼此牵制,通过相互通信来向前推进。那么,多个线程之间是如何进行通信的呢?
线程间的通信其实就...
分类:
编程语言 时间:
2015-01-18 21:13:12
阅读次数:
223
class Res {
String name;
String sex;
}
class Input implements Runnable {
private Res r;
public Input(Res r) {
// TODO Auto-generated constructor stub
this.r = r;
}
public void run() {
i...
分类:
编程语言 时间:
2015-01-18 21:09:50
阅读次数:
265
上一篇文章我们通过一个实例来说明了并发编程为什么要做同步处理,下面我们再来巩固一下。
对象如果拥有可变状态的变量,并且被多线程访问,那么这个时候我们要对可变状态变量的状态改变做原子操作处理。
锁机制是保证这样的操作的一个有效的方法,它可以保证变量的状态在被更新时是在一个原子操作中进行的。
java提供了一种内置锁机制来支持原子性:同步代码块(Sync...
分类:
编程语言 时间:
2015-01-18 15:44:11
阅读次数:
205