线程——死锁问题:
在同步中, 有时会产生死锁,这样我们需要尽量避免死锁的发生,
什么是死锁呢?——同步里面嵌套同步;
你持有一个锁,我也有一个锁, 我要到你那里去运行,我要拿你的锁,但是谁都不放锁, 就导致程序死锁了,程序死锁, 程序就挂着不动了, 如何产生死锁呢? 代码如下: - class Test implements Runnable
- {
- private boolean flag;
- Test(boolean flag){
- this.flag=flag;
- }
- public void run(){
- if(flag){
- while(true)
- {
- synchronized(Mylock.locka){//同步中嵌套同步
- System.out.println("a锁说:这是我的锁");
- synchronized(Mylock.lockb){
- System.out.println("a锁说:谢谢你的b锁");
- }
- }
- }
- }
- else{
- while(true)
- {
- synchronized(Mylock.lockb){
- System.out.println("b锁说:这是我的锁");
- synchronized(Mylock.locka){
- System.out.println("b锁说:谢谢你的a锁");
- }
- }
- }
- }
- }
- }
- //为了方便
- class Mylock
- {
- static Object locka=new Object();//静态的目的为了方便调用
- static Object lockb=new Object();
- }
- class ThreadDeadTest
- {
- public static void main(String[] args)
- {
- Thread t1= new Thread(new Test(true));
- Thread t2= new Thread(new Test(false));
- t1.start();
- t2.start();
- }
- }
复制代码 运行结果:
从代码分析, 开始线程二抢到CPU的执行权, b锁向a锁要到了锁, 所以就
出现了和谐的状态;
但是之后, 就出现了死锁。
,谁都不给谁, 就僵持着,哎!!!
|