代码改变世界

多线程之同步和死锁(转载)

2010-03-05 15:14  爱研究源码的javaer  阅读(275)  评论(0编辑  收藏  举报
class Program
    {
        
private static Object objA = new Object();
        
private static Object objB = new Object();
        
public static void LockA()
        {
            
if (Monitor.TryEnter(objA, 1000))
            {
                Thread.Sleep(
1000);
                
if (Monitor.TryEnter(objB, 2000))
                {
                    Monitor.Exit(objB);
                }
                
else
                {

                    Console.WriteLine(
"LockB timeout");
                }
                Monitor.Exit(objA);
            }
            Console.WriteLine(
"LockA");
        }
        
public static void LockB()
        {
            
if (Monitor.TryEnter(objB, 2000))
            {
                Thread.Sleep(
2000);
                
if (Monitor.TryEnter(objA, 1000))
                {
                    Monitor.Exit(objA);
                }
                
else
                {
                    Console.WriteLine(
"LockA timeout");
                }
                Monitor.Exit(objB);
            }
            Console.WriteLine(
"LockB");
        }
        
public static void Main()
        {
            Thread threadA 
= new Thread(LockA);
            Thread threadB 
= new Thread(LockB);
            threadA.Start();
            threadB.Start();
            Thread.Sleep(
4000);         
            Console.WriteLine(
"线程结束");
        }
    }
转自:http://www.cnblogs.com/nokiaguy/archive/2008/07/31/1257625.html