线程同步
来源:互联网 发布:win8无法激活windows 编辑:程序博客网 时间:2024/05/24 01:28
1. synchronized是在执行当前方法过程中当前对象被锁定
2. 死锁的原理
死锁的程序
public class ThreadDeadLock implements Runnable {
public int flag = 1;
static Object o1 = new Object();
static Object o2 = new Object();
public static void main(String args[]) {
ThreadDeadLock t1 = ThreadDeadLock();
ThreadDeadLock t2 = ThreadDeadLock();
t1.flag = 1;
t2.flag = 0;
Thread td1 = new Thread(t1);
Thread td2 = new Thread(t2);
td1.start();
td2.start();
}
public void run() {
system.out.println("Flag :" + flag);
if(flag == 1) {
synchronized(o1) {
try {
Thread.sleep(500);
} catch(Exception e) {
e.printStatckTrace();
}
}
synchronized(o2) {
system.out.println("1");
}
}
if(flag == 0) {
synchronized(o2) {
try {
Thread.sleep(500);
} catch(Exception e) {
e.printStatckTrace();
}
}
synchronized(01) {
system.out.println("0");
}
}
}
}
3. 在给对象加锁之前,一定要仔细考虑是否对这些方法加同步,加同步效率可能变低,不加的话可能出现数据不一致,加了锁的方法,只是说明其他线程不能访问此加锁方法中的语句。但是不能保证其他线程能否进入其他方法体内。
public synchronized void m1 throws Exception {
b= 1000;
Thread.sleep(5000);
system.out.println("b = " + b);
}
public void m2() throws Exception {
Thread.sleep(2500);
b = 2000;
}
此时b的值可以通过m2方法改变
当我在m2()方法前加上synchronized的话,就不能对b的值进行改变,因为它已经别上锁,不能再上一次锁。
- 线程同步--线程同步--线程同步--线程同步--线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- hibernate继承关系的映射(single_table,class_per_table,joined)
- java实现链,链栈,有序表和双链表(转)
- 十大Windows服务隐患重重
- TCP过程
- 解决VPN无法上网的心得
- 线程同步
- Windows目录下文件夹详解
- Windows目录下文件夹详解
- 欧拉项目第2题.
- Silverlight MMORPG网页游戏开发课程[一期] 第十四课:完结篇
- 持续检查之sonar初体验
- 内存管理相关函数
- MYSQL笔记(存储程序)
- Linux MMC/SD/SDIO体系结构