您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐