奇怪的便宜错误,望大虾指点
这个程序其它都是正确的,就只有一点,必须把main方法中的
myt3和inner变量声明为final的,否则就会产生
local variable myt3 is accessed from within inner;needs to declared final
编译错误,程序很简单,忘大家耐心!!
public class Thread3
{
class Inner
{
private void m4t1 ( )
{
int i = 5;
while ( i -- > 0 )
{
System.out.println ( Thread.currentThread ( ).getName ( ) + " : Inner.m4t1 ( ) = " + i );
try
{
Thread.sleep ( 500 );
}
catch ( InterruptedException ie )
{ }
}
}
private void m4t2 ( )
{
int i = 5;
while ( i-- > 0 )
{
System.out.println ( Thread.currentThread ( ).getName ( ) + " : Inner.m4t2 ( ) = " + i );
try
{
Thread.sleep ( 500 );
}
catch ( InterruptedException ie )
{ }
}
}
}
private void m4t1 ( Inner inner )
{
synchronized ( inner ) // 使用对象锁
{
inner.m4t1 ( );
}
}
private void m4t2 ( Inner inner )
{
inner.m4t2 ( );
}
private Inner createInner ( )
{
return new Inner ( );
}
public static void main ( String [ ] args )
{
// local variable myt3 is accessed from within inner;needs to declared final
Thread3 myt3 = new Thread3 ( );
// local variable inner is accessed from within inner;needs to declared final
Inner inner = myt3.new Inner();
Thread t1 = new Thread ( new Runnable ( )
{
public void run ( )
{
myt3.m4t1 ( inner );
}
} , "t1" );
Thread t2 = new Thread ( new Runnable ( )
{
public void run ( )
{
myt3.m4t2 ( inner );
}
} , "t2" );
t1.start();
t2.start();
}
}