在这种情况下,同步不起作用.为什么?我已经同步了所有方法.有人能告诉我并提供解决方案吗?



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

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();
}

}

以随机方式打印表。尽管我在所有的方法中都使用了synchronized。

同步方法将防止其他线程进入该方法所同步的对象上的同步块。在您的示例中,每个线程有两个方法,因此,例如,当first运行时,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);
}
}
}

最新更新