Я пытаюсь синхронизировать приложение потока с использованием синхронизированного ключевого слова. Иногда это странно. Существует двусмысленность в размещении ключевого слова synchronized. Код выглядит следующим образом:Синхронизация потоков Java - размещение синхронизированного ключевого слова
class Athread implements Runnable
{
public void run() {
System.out.println("Starting Implementation of Class Athread");
for(int i=1;i<=10;i++)
{
System.out.println("Class Athread :"+i);
}
System.out.println("Ending Implementation of class Athread");
}
}
class Bthread implements Runnable
{
public void run() {
System.out.println("Starting Implementation of Class Bthread");
for(int i=11;i<=20;i++)
{
System.out.println("Class Bthread :"+i);
}
System.out.println("Ending Implementation of class Bthread");
}
}
public class ThreadDemo {
public static void main(String[] args) {
System.out.println("Program starts..");
Athread t1 = new Athread();
Thread th1 = new Thread(t1);
Bthread t2 = new Bthread();
Thread th2 = new Thread(t2);
synchronized(th1){
th1.start();
}
synchronized(th2){
th2.start();
}
System.out.println("Program ends...");
}
}
Когда я помещаю синхронизированный блок в начале моей нити он должен блокировать эту нить и не чередовать с другими потоками. К сожалению, выход не так, как ожидалось. Мой выход следующим образом:
Program starts..
Program ends...
Starting Implementation of Class Athread
Starting Implementation of Class Bthread
Class Athread :1
Class Bthread :11
Class Athread :2
Class Bthread :12
Class Athread :3
Class Bthread :13
Class Athread :4
Class Bthread :14
Class Athread :5
Class Bthread :15
Class Athread :6
Class Bthread :16
Class Athread :7
Class Bthread :17
Class Athread :8
Class Bthread :18
Class Athread :9
Class Bthread :19
Class Athread :10
Class Bthread :20
Ending Implementation of class Athread
Ending Implementation of class Bthread
Даже когда я использую синхронизированную ключевое слово в методе Run() из обоих класса я не получить фактический желаемый результат.
Может кто-нибудь объяснить мне, как синхронизированное ключевое слово можно применить к моему приведенному выше примеру.
Спасибо.
ОБНОВЛЕНИЕ:
В вопросе выше, я неправильно понял концепцию синхронизации. В соответствии с полученными комментариями я пытаюсь позвонить двух разных потоков и получить доступ к двум различным ресурсам. Но синхронизация должна выполняться на общем/общем ресурсе. Следовательно, должно быть общее местоположение, на котором я должен попытаться синхронизировать.
Как вы думаете, что «синхронизировано»? –
Он контролирует доступ к потоку поверх других потоков. Короче говоря, «только по одному потоку за раз» – Neal
И что он делает с аргументом, который вы передаете ему? И как это связано с другим аргументом, который вы передаете другому «синхронизированному» блоку? –