Проблема в том, что я не вижу эффекта синхронизации блока. В Теории я знаю, что это должно блокировать блок, пока это не будет сделано с потоком, который будет обрабатываться в то время. Когда я запускаю следующий код с синхронизированным блоком или без него, ничего не меняется, ну, по крайней мере, это то, что я думаю. В принципе, как сделать эти потоки упорядоченными? Пожалуйста, очистите меня, спасибо.Разница между несинхронизированными потоками и синхронизированными потоками
public class Threads9 extends Thread{
private String name;
public Threads9(String paramName){
name = paramName;
}
public void run() {
print();
}
private void print() {
synchronized(this){
for(int i = 0;i<10;i++){
System.out.println(name+ " looping");
}
}
}
}
public class Threads9Main{
public static void main(String[] args) {
Threads9 thread1 = new Threads9("Thread1");
Threads9 thread2 = new Threads9("Thread2");
thread1.start();
thread2.start();
}
}
Использование 'System.out.println (...)' не является хорошей идеей, так как этот метод не поточно- (например, это не гарантирует, что вывод записывается в том же порядке, как 'System. out.println (...) '). Возможно, вы хотите взглянуть на [этот учебник] (https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html). – Turing85
Два потока синхронизируются на разных объектах. –
Re: «... ничего не меняется». Это очень слабый способ описать проблему, которую вы видите. На этот раз вам повезло, но лучший способ получить помощь на этом сайте (т. Е. Способ получить наилучшую помощь) - показать нам ваш код, рассказать нам подробно, что вы думаете, что это будет делать, рассказать нам, как это произошло для удовлетворения ваших ожиданий (включая полный текст любых непредвиденных сообщений об ошибках), а затем спросите нас, что пошло не так. –