在此同步不起作用。为什么?我已经同步了所有方法。任何人都可以告诉并提供相同的解决方案吗?
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);
}
}
}
编写一个程序在多线程的帮助下打印 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);
}
}
}