黑马程序员 – 学习Java5线程并发库(3) -- 2013.1.1
来源:互联网 发布:弱视治疗软件 编辑:程序博客网 时间:2024/05/24 11:13
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
昨天学习了线程的互斥与同步通信,今天学习了线程范围内的共享变量的概率。
嗯,新的一年到了,一定要好好学习JAVA!
当多个线程要访问同一个共享数据时,要注意线程的互斥(银行账户的例子,一个线程存,一个线程取,线程不互斥的话,账户上的金额就会出现问题),用同步代码块解决这类问题时,应该注意:
使用同步的前提
1. 必须要有两个或两个以上的线程
2. 必须是多个线程使用同一锁(监视器对象)。
同步代码块:
Synchronized( 监视器对象 )
{
需要被同步的代码
}
Synchronized 关键加在函数上:
非静态函数用的锁是this,即调用函数的对象
静态函数用的锁是函数所在类的 .class文件。
同步通信时,张老师讲了一道面试题:子线程运行10次,主线程运行100次,接着子线程运行10次,主线程运行100次。如此循环往复50次。
张老师讲了一个重要的经验:要用到共同数据或共同算法的若干个方法,应该归在同一类中,这种设计正好体现了高类聚和程序的健壮性。这样的话,要添加新的同步线程,同步代码只需要在该类中添加即可,要修改同步的代码或算法,也是在该类中集中修改。
防止假唤醒的机制:用while而不是if
synchronized( object ) {
while(<condition does not hold>
obj.wait(timeout);
要同步的代码
}
线程范围内的共享变量:对于全局变量,每一个线程里对它的操作只在该线程范围内有效,不影响其它线程对它的操作。明天将继续学习ThreadLocal的应用。
- 黑马程序员 – 学习Java5线程并发库(3) -- 2013.1.1
- 黑马程序员 – 学习Java5线程并发库(5) -- 2013.1.3
- 黑马程序员 – 学习Java5线程并发库(4) -- 2013.1.2
- 黑马程序员 – 学习Java5线程并发库(6) -- 2013.1.4
- 黑马程序员 – 学习Java5线程并发库(7) -- 2013.1.5
- 黑马程序员 – 学习Java5线程并发库(7) -- 2013.1.5
- 黑马程序员 – 学习Java5线程并发库(7) -- 2013.1.5
- 黑马程序员——Java5中的线程并发库(一)---概述、线程池、Callable和Future、Lock和Condition
- Java5 并发线程学习
- 黑马程序员:Java基础总结----线程池及java5的线程并发库
- java5线程并发库学习之Semaphore
- java5线程并发库学习之Semaphore
- java5线程并发库
- java5 线程并发库
- 黑马程序员 – 学习Java5中的多线程(1) – 2012.10.29
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合
- 黑马程序员---线程并发库
- 黑马程序员Java学习笔记之多线程(并发)
- 盘点:崛起中的九大HTML5开发工具
- 黑盒测试工具汇总
- 黑马程序员 – 学习Java5中的多线程(2) – 2012.12.30
- Codeforces Round #161 (Div. 2)总结
- sed命令详解(上)
- 黑马程序员 – 学习Java5线程并发库(3) -- 2013.1.1
- sed命令详解(下)
- C++中using的作用
- hadoop的hbase安装入门
- SQLiteHelper类,操作SQLite数据库
- 使用hibernate更新和删除时不能使用关系联接操作
- 安装vs2010找不到baseline数据
- 软件随想录:程序员部落酋长Joel谈软件(阮一峰译)-6
- 黑马程序员 – 学习Java5线程并发库(4) -- 2013.1.2