Java多线程之同步与死锁
2008-04-21 14:37
316 查看
1.线程的同步
1)The code segments within a program that access the same object from separate, concurrent threads are called “critical sections”。这是临界区的概念。
2)同步的两种方式:同步块和同步方法。
3)每一个对象都有一个监视器,或者叫做锁。
当线程执行到synchronized的时候,检查传入的实参对象,并得到该对象的锁旗标。如果得不到,那么此线程就会被加入到一个与该对象的锁旗标相关联的等待线程池中,一直等到对象的锁旗标被归还,池中的等待线程就会得到该锁旗标,然后继续执行下去。当线程执行完成同步代码块,就会自动释放它占有的同步对象的锁旗标。一个用于synchronized语句中的对象称为监视器,当一个线程获得了synchronized(object)语句中的代码块的执行权,即意味着它锁定了监视器。
4)同步方法利用的是this所代表的对象的锁。
下面实例介绍代码块与方法间的同步。观察this的作用。
public class Deadlock implements Runnable{
A a=new A();
B b=new B();
Deadlock(){
Thread.currentThread().setName("MainThread");
new Thread(this).start();
System.out.println("track after start");
a.foo(b);
System.out.println("back in main thread");
}
public void run(){
System.out.println("track in run");
Thread.currentThread().setName("RacingThread");
b.bar(a);
System.out.println("back in other thread");
}
public static void main(String[]args){
new Deadlock();
}
}
结果:
track after start
MainThread enter A.foo
track in run
RacingThread enter B.bar
MainThread trying to call B.last
RacingThread trying to call A.last
3.参考资料
[1]Thinking in Java 3rd
1)The code segments within a program that access the same object from separate, concurrent threads are called “critical sections”。这是临界区的概念。
2)同步的两种方式:同步块和同步方法。
3)每一个对象都有一个监视器,或者叫做锁。
当线程执行到synchronized的时候,检查传入的实参对象,并得到该对象的锁旗标。如果得不到,那么此线程就会被加入到一个与该对象的锁旗标相关联的等待线程池中,一直等到对象的锁旗标被归还,池中的等待线程就会得到该锁旗标,然后继续执行下去。当线程执行完成同步代码块,就会自动释放它占有的同步对象的锁旗标。一个用于synchronized语句中的对象称为监视器,当一个线程获得了synchronized(object)语句中的代码块的执行权,即意味着它锁定了监视器。
4)同步方法利用的是this所代表的对象的锁。
下面实例介绍代码块与方法间的同步。观察this的作用。
public class Deadlock implements Runnable{
A a=new A();
B b=new B();
Deadlock(){
Thread.currentThread().setName("MainThread");
new Thread(this).start();
System.out.println("track after start");
a.foo(b);
System.out.println("back in main thread");
}
public void run(){
System.out.println("track in run");
Thread.currentThread().setName("RacingThread");
b.bar(a);
System.out.println("back in other thread");
}
public static void main(String[]args){
new Deadlock();
}
}
结果:
track after start
MainThread enter A.foo
track in run
RacingThread enter B.bar
MainThread trying to call B.last
RacingThread trying to call A.last
3.参考资料
[1]Thinking in Java 3rd
相关文章推荐
- java多线程——同步与死锁
- JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- 【十八掌●基本功篇】第一掌:Java之多线程--2-join、同步、死锁、等待
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- Java多线程之同步与死锁
- 黑马程序员——Java基础——多线程的同步、死锁和等待唤醒机制
- Java多线程--同步与死锁:synchronized;等待与唤醒:wait、notify、notifyAll;生命周期
- Java多线程---------同步与死锁:synchronized;等待与唤醒:wait、notify、notifyAll;生命周期
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- Java多线程线程、同步代码块、同步函数、死锁
- [Java]多线程之同步及死锁
- JAVA多线程(二)竞态条件、死锁及同步机制
- java:多线程-同步与死锁
- Java 多线程 同步与死锁
- JAVA多线程(二)竞态条件、死锁及同步机制
- Java--多线程Thread(实现,并发并行,同步死锁,单例,线程组池)
- Java基础之多线程(一)--概述、同步、死锁、单例模式
- java 多线程详解(多线程的创建、同步思想、死锁等)
- 黑马程序员_java多线程的同步和死锁