📄 j_lock.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 + -