当几个线程共享 某个对象的时候 需要同步来解决
我这样理解是不是正确的啊??
但是下面的代码,却不能实现同步,请老大赐教
class Printer
{
synchronized void print(char c)
{
for (int i = 0; i<10; i++)
System.out.print (c);
}
}class PrintThread extends Thread
{
char c;
Printer p;

PrintThread(Printer p, char c)
{
this.p=p;
this.c=c;
}

public void run()
{
for (int i = 0; i<10; i++)
{
p.print(c);
System.out.println ();
}
}
}
class Demo2
{
public static void main(String args[])
    {
     Printer p = new Printer();
     PrintThread p1 = new PrintThread(p,'A');
     PrintThread p2 = new PrintThread(p,'B');
    
     p1.start();
     p2.start();
    }
}

解决方案 »

  1.   

    你这个程序试想打印10行A,每行10个A
    但是你把
    class Printer
    synchronized void print(char c)
    设为互斥块,那么即使线程在print方法的for中被打断
    仍不能得到锁
    所以能保证每行10个A中不会插入B但是不能保证先打完10行A再是10行B
    因为线程有可能在run方法的for循环时候被打断
    P1,进入RUN,获取print的锁,进入print,打印10个A,释放锁
    P1,进入RUN,获取print的锁,进入print,打印10个A,释放锁P1,进入RUN,获取print的锁,进入print,打印3个A,被打断
    P2,进入RUN,获取print的锁,不能获取,等待
    P1,从刚才被打断处开始,打印7个A,释放锁P1,进入RUN,获取print的锁,进入print,打印10个A,释放锁
    P1,进入RUN,获取print的锁,进入print,打印10个A,释放锁P1,进入RUN,被打断  <-此时锁是没有被锁上的
    P2,进入RUN,获取print的锁,进入print,打印10个B,释放锁那么此时就是两行A,然后就是N行B