public class ThFF {
public synchronized void ni(){
for(int s=0;s<100;s++)
{
System.out.println(Thread.currentThread().getName()+ " "+s);
}
}
}
public class RN implements Runnable{
public void run(){
ThFF r=new ThFF();
r.ni();
}
}
public class nihao {
public static void main(String s[]){
RN tr=new RN();
Thread TR1=new Thread(tr);
Thread TR2=new Thread(tr);
TR1.start();
TR2.start();
}
}
锁呢? 锁呢?
我锁在了最上面的那个类上,那个类被实现Runnable的类调用, 两个线程都要通过RN类(即实现Runnable的类)去调用ThFF类(带锁的),这样锁不住,输出还是两个交换执行的。
怎么回事啊?大神帮我解解!谢谢了啊
@梦再笑: 100%是你不明白什么是锁.或者说你不知道你用的这个是什么锁..换个吧.或者查一下这种锁是怎么用的
@吴瑞祥: 我昨天想了好久,终于明白了,我说说我的理解,你帮我分析下看我说的对不对,好吗?
我这个写法,是不是始终无论什么时候总是同一个run()方法在执行的上面那个锁.并没有存在两个不同的对象去访问同步方法?我理解的对吗?
但是,如果我把第二个类中的 ThFF r=new ThFF(); 这个声明创建放在第二个类的全局的位置, 那样就能被锁住了 也就是这样
public class RN implements Runnable{
ThFF r=new ThFF();
public void run(){
r.ni();
}
}