Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2016, 14:23   #1
ukdug179
Пользователь
 
Регистрация: 21.09.2016
Сообщений: 13
По умолчанию Обращение к файлу. wait(), notify(), notifyAll(), Runnable

"Продемонстрировать программу, в которой разные потоки обращаются к файлу,
используя методы wait(), notify(), notifyAll(). Для разработки классов потоков
использовать интерфейс Runnable."

Написал программу, которая читает файлы и использует wait(), notify() и notifyAll(). Но как использовать Runnable не придумал, поэтому воткнул циклы и конструкцию, которая увеличивает и уменьшает число. Что-то нужно изменить в программе, чтобы он была не такой корявой и более приближенной к реальности?

Код:
Код:
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
 
public class Lab5 {
  
    public static void main(String[] args) {
          
        Number number=new Number();
        Add_numb add_numb = new Add_numb(number);
        Reduce_numb reduce_numb = new Reduce_numb(number);
        new Thread(add_numb).start();
        new Thread(reduce_numb).start();
    }
}
 
class Number{
   private int product=0;
   public synchronized void get() {
      while (product<1) {
         try {
            System.out.println("Идет чтение первого файла");  
            File f=new File("D:\\file.txt");
            try(FileReader reader = new FileReader(f))
               {
                char[] buffer = new char[(int)f.length()];
                reader.read(buffer);
                System.out.println(new String(buffer));
                System.out.println("Чтение первого файла завершено");
                wait();
                }
                catch(IOException ex){              
                 System.out.println(ex.getMessage());
                }
                             
         }
         catch (InterruptedException e) {
             System.out.println("Чтение первого файла не может быть выполнено" + e);
         }
      }
      product--;      
      System.out.println("Число уменьшено на 1");
      System.out.println("Число: " + product);
      notify();
   }
   public synchronized void put() {
       while (product>0) {
         try {
            System.out.println("Идет чтение второго файла");  
            File f=new File("D:\\file2.txt");
            try(FileReader reader = new FileReader(f))
               {
                char[] buffer = new char[(int)f.length()];
                reader.read(buffer);
                System.out.println(new String(buffer));
                System.out.println("Чтение второго файла завершено");
                wait();
                }
                catch(IOException ex){              
                 System.out.println(ex.getMessage());
                }
                
               
         }
         catch (InterruptedException e) {
             System.out.println("Чтение второго файла не может быть выполнено " + e); 
         } 
      }
      product++;
      System.out.println("Число увеличено на 1");
      System.out.println("Число: " + product);      
      notify();
   }
}
 
class Add_numb implements Runnable{
  
    Number number;
    Add_numb(Number number){
       this.number=number; 
    }
    public void run(){
        for (int i = 1; i < 3; i++) {
            number.put();
        }
    }
}
 
class Reduce_numb implements Runnable{
      
     Number number;
    Reduce_numb(Number number){
       this.number=number; 
    }
    public void run(){
        for (int i = 1; i < 3; i++) {
            number.get();
        }
    }
}
ukdug179 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обращение к файлу RevenGGe HTML и CSS 6 23.11.2012 12:02
Обращение к файлу Styler Общие вопросы Delphi 4 23.02.2012 18:32
wait, notifyAll --Serega-- Общие вопросы по Java, Java SE, Kotlin 1 20.12.2011 10:12
Обращение к файлу Form_13 Общие вопросы Delphi 16 19.12.2011 14:07
Помогите отследить обращение к логическому диску, папке, файлу bonzo Общие вопросы Delphi 4 08.02.2007 12:12