Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Исходный текст программы FileSynchro.java

Оглавление

Назад

// ==========================================
// FileSynchro.java
//(C) Alexandr Frolov, 1998
// E-mail: frolov@glasnet.ru
// Web:    http://www.glasnet.ru/~frolov 
// ==========================================
import java.io.*;
import java.util.*;

public class FileSynchro
{
  int nBlocks = 0;
  int i;
  fileWriter ioThread;
  
  // ============================================
  // main
  // ============================================
  public static void main(String args[])
  {
    FileSynchro fs = new FileSynchro();
    
    System.out.println(
      "*Multithread file writer*\r\n");
    System.out.print(
      "Enter number of blocks: ");
    fs.nBlocks = getKbdInt();
    
    fs.ioThread = new fileWriter(fs.nBlocks);
    fs.ioThread.start();
    
    try
    {
      fs.ioThread.join();
    }
    catch(InterruptedException ie)
    {
      System.out.println(ie.toString());
    }  
    
    System.out.print(
      "All done!\r\nPress <Enter>...");
    getKbdByte();
  }
  
  // ============================================
  // getKbdInt
  // ============================================
  static public int getKbdInt()
  {
    byte bKbd[] = new byte[256];
    int iCnt = 0;
    String szStr = "";
    StringTokenizer st;
    
    try
    {
      iCnt = System.in.read(bKbd);
    }
    catch(Exception ex)
    {
      System.out.println(ex.toString()); 
    }
      
    szStr = new String(bKbd, 0, iCnt);
    st = new StringTokenizer(szStr, "\r\n");
    szStr = 
      new String((String)st.nextElement());
      
    Integer intVal = new Integer(szStr);
    return intVal.intValue();
  }

  // ============================================
  // getKbdByte
  // ============================================
  static public byte getKbdByte()
  {
    byte bKbd[] = new byte[1];
    int iCnt = 0;
    
    try
    {
      iCnt = System.in.read(bKbd);
    }
    catch(Exception ex)
    {
      System.out.println(ex.toString()); 
    }
    return bKbd[0];
  }
}

// ============================================
// Class fileWriter
// ============================================
class fileWriter extends Thread
{
  int nBlocks;
  
  // ============================================
  // fileWriter
  // ============================================
  public fileWriter(int n)
  {
    nBlocks = n;
  }
  
  // ============================================
  // run
  // ============================================
  public void run()
  {
    int i;
    DataOutputStream os;
    
    ioControl ioc = new ioControl(this);
    ioc.start();
   
    try
    {
      os = new DataOutputStream(
        new FileOutputStream("testfile.txt"));
	
      for(i = 0; i < nBlocks; i++)
      {
        os.writeBytes("Test string\r\n");
	
	if(i%100 == 0)
	{
	  synchronized(ioc)
	  {
	    ioc.setPosition(i);
	    ioc.notify();
	  }  
	}
      }

      synchronized(ioc)
      {
        ioc.setPosition(i);
        ioc.notify();
        ioc.end();
        ioc.join();
      }	
      
      os.flush();
      os.close();
      
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }  
  }
}

// ============================================
// Class ioControl
// ============================================
class ioControl extends Thread
{
  int nPosition;
  Thread ioThread;
  static boolean end = false;
  
  // ============================================
  // ioControl
  // ============================================
  public ioControl(Thread th)
  {
    ioThread = th;
  }
  
  // ============================================
  // setPosition
  // ============================================
  public void setPosition(int i)
  {
    nPosition = i;
  }
  
  // ============================================
  // end
  // ============================================
  public void end()
  {
    end = true;
  }
  
  // ============================================
  // run
  // ============================================
  public synchronized void run()
  {
    while(!end)
    {
      try
      {
        this.wait();
      }
      catch(InterruptedException ie)
      {
        System.out.println(ie.toString());
      }  
      
      System.out.println(
        "String = " + nPosition);
    }  
  }
}

 

[Назад]