本帖最后由 杨兴庭 于 2013-8-6 21:31 编辑
对一段代码做了封装后,编译后出现了图一
import java.util.concurrent.atomic.AtomicInteger;
class dome4
{
public static void main(String[] args)
{
final business bus= new business();
new Thread(
new Runnable(){
public void run()
{
//if(!fale) 内部类访问外部类变量需要声明最终类型。
//在这里我们发现只要把要同步的代码翻转到一个类中就可以实现标记判断,进行通信,
//代码进行改动
for (int y= 0;y<50 ;y++ )
business.sun(y);
/*synchronized(dome4.class)
{
for (int x = 0;x<10 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"..."+x+"sun zongcishu.."+y);
}
}*/
//fale= true;
}}
).start();
for (int y= 0;y<50 ;y++ )
business.main(y);
/*synchronized(dome4.class)
{
for (int x = 0;x<10 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"..."+x+"sun zongcishu.."+y);
}
}*/
}}
class business
{
//在这里进行通信
private boolean fale=true;
public synchronized void sun(int y)
{
while(!fale)
try
{
this.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
for (int x = 0;x<10 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"..."+x+"sun zongcishu.."+y);
}
fale= false;
this.notify();
}
public synchronized void main(int y)
{
while(fale)
try
{
wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
for (int x = 0;x<10 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"..."+x+"sun zongcishu.."+y);
}
fale= true;
this.notify();
}
}
在分析下,主函数是一个静态的,他调用一个类的方法但不是静态的
我就把
private static boolean fale= false;
public static synchronized void sun(int y)
public static synchronized void main(int y)
加了静态。又编译出现了图二
还在研究中,求解释??
|
|