在此同步不起作用。为什么?我已经同步了所有方法。任何人都可以告诉并提供相同的解决方案吗?

In this synchronization is not working. Why? I have synchronized all methods. Can anyone please tell and provide solution for the same?

编写一个程序在多线程的帮助下打印 tables 创建三个线程,分别命名为 T1、T2 和 T3。 T1 线程打印 11 和 12 的 table,T2 打印 13 和 14 的 table,T3 打印 15 和 16 的 table。任何线程都可以先启动,但是一旦任何线程开始打印table 的任何数字不允许由另一个线程打印不同的 table。例如,假设线程 t3 首先启动并开始打印 15 table,直到 table of 15 完成,没有人打印另一个 table。一旦 15 table 的打印结束,任何人都可以打印另一个 table.

class A implements Runnable{
    public void run(){
        first();
        second();


    }
    synchronized public void first(){
        for(int i=0;i<=10;i++){
            System.out.println("Table of 11 is "+11*i);
        }
    }
    synchronized public void second(){
        for(int i=0;i<=10;i++){
            System.out.println("Table of 12 is "+12*i);
        }
    }
   
}
class B implements Runnable{
    public void run(){
        third();
        fourth();


    }
    synchronized public void third(){
        for(int i=0;i<=10;i++){
            System.out.println("Table of 13 is "+13*i);
        }
    }
    synchronized public void fourth(){
        for(int i=0;i<=10;i++){
            System.out.println("Table of 14 is "+14*i);
        }
    }
}
class C implements Runnable{
    public void run(){
        fifth();
        sixth();


    }
    synchronized public void fifth(){
        for(int i=0;i<=10;i++){
            System.out.println("Table of 15 is "+15*i);
        }
    }
    synchronized public void sixth(){
        for(int i=0;i<=10;i++){
            System.out.println("Table of 16 is "+16*i);
        }
    }
}




public class threading3 {
    public static void main(String args[]){
        A a1=new A();
        B b1=new B();
        C c1=new C();
        Thread t1=new Thread(a1);
        Thread t2=new Thread(b1);
        Thread t3=new Thread(c1);
        t1.start();
        t2.start();
        t3.start();

    }
    
}

尽管我在所有方法中都使用同步,但它随机打印 table way.Even。

同步方法将阻止其他线程进入同步块同一个对象上的同步方法。在您的示例中,每个线程都有两个方法,因此例如 first 是 运行ning,second 不能 运行,但是没有什么可以阻止 third 运行宁.

您需要同步同一对象上的所有方法:

Object s=new Object();
A a1=new A(s);
B b1=new B(s);
C c1=new C(s);
class A implements Runnable{
  Object s;
  public A(s Object) {
     this.s=s;
  }
  public void first(){
      synchronized(s) {
         for(int i=0;i<=10;i++){
             System.out.println("Table of 13 is "+13*i);
         }
      }
  }