|
|
Исходный текст программы 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);
}
}
}
|
|
|