Применить синхронизацию к нестатическому атрибуту класса

открытый класс MainClass { public static void main(String[] args) {

    T1 ok = new T1();
    T2 ok1 = new T2();
    ok.start();
    ok1.start();
}

}

public class T1 extends Thread {

@Override
public void run() {
    DemoClass q = new DemoClass();
    for (int i = 0; i <= 5; i++)
        try {
            q.demoMethod();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

}

public class T2 extends Thread {

@Override
public void run() {
    DemoClass q = new DemoClass();
    for (int i = 0; i <= 5; i++)
        try {
            q.demoMethod1();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

}

public class DemoClass {
String s = "";
String s1 = "";
public void demoMethod() throws InterruptedException {
    System.out.println(Thread.currentThread().getName() + " Entered m1");

    synchronized (s) {
        System.out.println(Thread.currentThread().getName() + " Inside m1 ");

        Thread.sleep(5000);
    }
    System.out.println(Thread.currentThread().getName()+" m1");

}

public void demoMethod1() throws InterruptedException {
    System.out.println(Thread.currentThread().getName() + " Entered m2");


        System.out.println(Thread.currentThread().getName() + " Inside m2 ");

        Thread.sleep(5000);
    
    System.out.println(Thread.currentThread().getName()+" m2");

}

}

Даже когда я создавал отдельные объекты DemoClass, то вызывал отдельные методы через отдельные потоки. почему одновременно работает только один поток?

Или, если кто-то может подсказать, какой тип блокировки мы будем вызывать для кода в DemoClass

Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы синхронизируете s, который всегда является одним и тем же объектом.

Не делай этого. Синхронизируйте this, если вы собираетесь синхронизировать что-либо.

Большое спасибо Луи. Не могли бы вы ответить и на это: stackoverflow.com/questions/71809221/…

krishna 10.04.2022 04:25

Похоже, у него уже есть отличный ответ.

Louis Wasserman 10.04.2022 04:33

Другие вопросы по теме