открытый класс 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
Вы синхронизируете s
, который всегда является одним и тем же объектом.
Не делай этого. Синхронизируйте this
, если вы собираетесь синхронизировать что-либо.
Похоже, у него уже есть отличный ответ.
Большое спасибо Луи. Не могли бы вы ответить и на это: stackoverflow.com/questions/71809221/…