⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 j_lock.java.bak

📁 一个十分好的java基础学习的课件
💻 BAK
字号:
// ////////////////////////////////////////////////////////
// 
// J_Lock.java
// 
// Created by Jun-Hai Yong,    on XX xx, xxxx (Date)
// ////////////////////////////////////////////////////////
// Readme:
//      An example of dead locks.
// ////////////////////////////////////////////////////////
// Using this example, please explicitly refer to the book:
//     Jun-Hai Yong. Programming in Java. 
//     Beijing: Tsinghua University Press, 2004.
// 使用本例子,请注明引用:
//     雍俊海. Java 程序设计. 北京: 清华大学出版社, 2004.
// Please note that the author and publisher make no 
// warranty of any kind on the examples provided.
// ////////////////////////////////////////////////////////

class J_Data
{

    public void mb_loop( ) // 本成员方法只是通过循环延长时间
    {
        for(int i=0; i<1000; i++)
        {
            double d= Math.sin(i);
            int j= (int)d+i;
            i= j-(int)d;
        } // End of for loop
    } // End of method: mb_loop

}  // End of class: J_Data

class J_ThreadA extends Thread
{

    J_Data m_dataA;
    J_Data m_dataB;
    
    public J_ThreadA(J_Data a, J_Data b)
    {
        m_dataA= a;
        m_dataB= b;
    } // End of constructor

    public void run( )
    {
        for( ; true; )
        {
            synchronized(m_dataA)
            {
                System.out.println("J_ThreadA locks m_dataA.");
                m_dataA.mb_loop( );
                synchronized(m_dataB)
                {
                    System.out.println("J_ThreadA locks m_dataB.");
                    m_dataA.mb_loop( );
                    m_dataB.mb_loop( );
                }
            }
            System.out.println("J_ThreadA frees both m_dataB and m_dataA.\n");
        } // End of for loop
    } // End of method: run
    
}  // End of class: J_ThreadA

class J_ThreadB extends Thread
{

    J_Data m_dataA;
    J_Data m_dataB;
    
    public J_ThreadB(J_Data a, J_Data b)
    {
        m_dataA= a;
        m_dataB= b;
    } // End of constructor

    public void run( )
    {
        for( ; true; )
        {
            synchronized(m_dataB)
            {
                System.out.println("J_ThreadB locks m_dataB.");
                m_dataB.mb_loop( );
                synchronized(m_dataA)
                {
                    System.out.println("J_ThreadB locks m_dataA.");
                    m_dataB.mb_loop( );
                    m_dataA.mb_loop( );
                }
            }
            System.out.println("J_ThreadB frees both m_dataB and m_dataA.\n");
        } // End of for loop
    } // End of method: run
    
}  // End of class: J_ThreadB


public class J_Lock extends Thread
{
    
    public static void main( String args[] )
    { 
        J_Data a= new J_Data( );
        J_Data b= new J_Data( );
        J_ThreadA frank = new J_ThreadA(a, b);
        J_ThreadB mary = new J_ThreadB(a, b);
        frank.start( );
        mary.start( );
    } // End of method: main

}  // End of class: J_Lock

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -