Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Sinhronization Синхронизация, Необходима синхронизация 
:(
    Опции темы
ValerStrim
  Дата 27.10.2010, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.10.2010

Репутация: нет
Всего: нет



Как тут правильно реализовать синронизацию то? Чёт я запутался... помогите плиз, разъясните, как синхронизировать процесс на заводе???
Код

public class Zavod {

    /**
     * @param args
     */
    public static void main(String[] args) {
        FirstMarka f_ceh=new FirstMarka();
        SecondMarka s_ceh=new SecondMarka();
        
        if (!f_ceh.sobratNewAvto(f_ceh)) System.out.println("Cann't create new auto. Please check Sklad.");
        else System.out.println("Succesfully create new auto. On first Ceh");
        
        
        if (!s_ceh.sobratNewAvto(s_ceh)) System.out.println("Cann't create new auto. Please check Sklad.");
        else System.out.println("Succesfully create new auto. On second Ceh");
        
    }
    
}


public class FirstMarka extends Sklad {
    final private int need_dvizok=1;
    final private int need_kuzov=1;
    final private int need_pricep=0;
    

    protected synchronized boolean sobratNewAvto(Sklad obj) 
    {
        synchronized (obj){
        synchronized (this){
        if (checkDetails(obj))
        {
            for (int i = 0; i < need_dvizok; i++) 
            {
                if (!obj.getDetal(1)) 
                {
                    return false;
                }
            }
            for (int i = 0; i < need_kuzov; i++) 
            {
                if (!obj.getDetal(2)) 
                {
                    return false;
                }
            }
            for (int i = 0; i < need_pricep; i++) 
            {
                if (!obj.getDetal(3)) 
                {
                    return false;
                }
            }
            
            obj.addNewAuto(1);
            obj.SaveDataToFile(1, need_dvizok,need_kuzov,need_pricep);
        }else return false;
        }}
        return true;    
    }
    
    private boolean checkDetails(Sklad obj)
    {
        int[] val = obj.getValues();
        if (val[0]<need_dvizok || val[1]<need_kuzov || val[1]<need_pricep) return false;
        return true;
    }
}



public class SecondMarka extends Sklad{
    final private int need_dvizok=1;
    final private int need_kuzov=1;
    final private int need_pricep=1;
    
    protected synchronized boolean sobratNewAvto(Sklad obj) 
    {
        synchronized (obj){
        synchronized (this){
        if (checkDetails(obj))
        {
            
            for (int i = 0; i < need_dvizok; i++) 
            {
                if (!obj.getDetal(1)) 
                {
                    return false;
                }
            }
            for (int i = 0; i < need_kuzov; i++) 
            {
                if (!obj.getDetal(2)) 
                {
                    return false;
                }
            }
            for (int i = 0; i < need_pricep; i++) 
            {
                if (!obj.getDetal(3)) 
                {
                    return false;
                }
            }
            
            obj.addNewAuto(2);            
            obj.SaveDataToFile(2, need_dvizok,need_kuzov,need_pricep);
        }else return false;
        }}
        return true;    
    }
    
    private boolean checkDetails(Sklad obj)
    {
        int[] val = obj.getValues();
        if (val[0]<need_dvizok || val[1]<need_kuzov || val[1]<need_pricep) return false;
        return true;
    }
}


import java.io.*;

public class Sklad {
    private int dvizok = 40;
    private int kuzov = 20;
    private int pricep = 30;
    private int first_count = 0;
    private int second_count = 1;
    
    protected synchronized void addNewAuto(int type)
    {
        switch (type) 
        {
        case 1:
            
                synchronized (this){
            first_count++;
                }
            break;

        case 2:
            
                synchronized (this){
            second_count++;
                }
            break;
        }
    }
    
    protected synchronized boolean getDetal(int type) 
    {
        switch (type) {
        case 1:
            if ((dvizok-1)<1) return false;
            dvizok--;
            break;

        case 2:
            if ((kuzov-1)<1) return false;
            kuzov--;
            break;
        
        case 3:
            if ((pricep-1)<1) return false;
            pricep--;
            break;
        }
        return true;
    }
    protected synchronized int[] getValues()
    {
        int[] values = {dvizok, kuzov, pricep};
        return values;
    }
    
    protected void SaveDataToFile(int type, int need_dvizok, int need_kuzov, int need_pricep)
    {
        try {
             FileOutputStream outFile = new FileOutputStream ( "autozavod.txt", true) ;  
             RandomAccessFile rf = new RandomAccessFile( "autozavod.txt", "rw"); 
             DataOutputStream outData = new DataOutputStream ( outFile ) ;  
                outData.writeUTF("\n");
                outData.writeUTF ( "-------------------------------"+"\n" ) ;
                outData.writeUTF (" Ceh #"+type+": Successfully created auto \n");
                outData.writeUTF ( "| Needed Dvig: "+ need_dvizok + "| \n");
                outData.writeUTF ( "| Needed Kuzov: "+ need_kuzov +"| \n");
                outData.writeUTF ( "| Needed Priceps: "+ need_pricep + "| \n");
                outData.writeUTF ( "--------------------------------"+"\n" ) ;
                outData.writeUTF ( "Itogo na sklade: "+"\n" ) ;
                outData.writeUTF ( "| Dvig: "+ dvizok + "| \n");
                outData.writeUTF ( "| Kuzov: "+ kuzov +"| \n");
                outData.writeUTF ( "| Priceps: "+ pricep + "| \n");
                outData.writeUTF ( "| First Auto: "+ first_count +"| \n");
                outData.writeUTF ( "| Second Auto: "+ second_count + "| \n");
                outData.writeUTF ( "--------------------------------"+"\n" ) ;
                outData.flush();
                 // outData.writeUTF ( favList [ i ] + "\n" ) ; 
                 //outData.writeDouble ( priceList [ i ]  ) ;
                 //outData.writeBytes("test");
                 // outData.writeChars("test");
                 // outData.writeUTF ( here ) ; 
                     
             outData.close ( ) ; 
             rf.close();
    
        }catch (IOException e) {
    
            System.out.println("ошибка файла: " + e);
            }
    }
}



PM MAIL   Вверх
nc30
Дата 30.10.2010, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Насколько я понял, вы пытаетесь решить вами же предложенную в этой теме задачу.
А именно:
Цитата

3. На заводе налажена сборка машин двух марок. Для первой марки необходимы кузов и двигатель. Для второй марки необходимы кузов, двигатель и прицеп. Есть две линии сборки машин первой марки и одна линия сборки машин второй марки. Вся продукция хранится на складе и моментально переносится с него на линию сборки и назад. 
Необходимо написать программу, моделирующую сборку машин на заводе. Каждая линия сборки  машин должна быть представлена своим потоком выполнения с разными приоритетами, синхронизирующимися на общем складе продукции. Программа должна сохранить в один текстовый файл информацию о процессе сборки в виде отдельных строк с человекочитамыми сообщениями о количестве каждого вида изделий на складе при любых изменениях. Изначально на складе машин первой марки 0, машин второй марки 1, двигателей 40, кузовов 20, прицепов 30. Обеспечить защиту полей и методов от внешнего доступа. 

Если я прав, то для решения этой задачи вам, по крайней мере, необходимо сначала познакомиться с потоками в Java (судя по представленной попытке решения, вы с ними незнакомы), а уже потом пытаться их синхронизировать  smile 

Это сообщение отредактировал(а) nc30 - 31.10.2010, 09:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.