java编程大题

设计4个线程,线程1每次对整数j增加1,线程2数据写入文件“file.dat”中,线程3每次对整数j减少1,线程将文件“file.dat”中数据值为j的数据删除。写出程序。



package 多线程;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;

public class ThreadDemo {
	public int j;
	public T1 t1;
	public T2 t2;
	public T3 t3;
	public T4 t4;
	ThreadDemo(){
		j=1;
		t1 = new T1();
		t2 = new T2();
		t3 = new T3();
		t4 = new T4();
	}
	
	public class T1 implements Runnable{
		public void run(){
			j++;
			System.out.println("T1: j="+j);
			j++;
			System.out.println("T1: j="+j);
		}
	}
	public class T2 implements Runnable{
		public void run(){
			try {
				FileWriter fw = new FileWriter("file.dat",true);
				fw.write(j+"\r\n");
				fw.close();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				System.out.println("File not found");
				e.printStackTrace();
			}
			catch(Exception e){
				e.printStackTrace();
			}
			System.out.println("T2: write j to file.dat, j="+j);
		}
	}
	public class T3 implements Runnable{
		public void run(){
			j--;
			System.out.println("T3: j="+j);
		}
	}
	public class T4 implements Runnable{
		public void run(){
			String temp="";
			String result="";
			boolean flag = true;
			System.out.println("T4: 删除j="+j+"的数据");
			try{			
				FileWriter fw = new FileWriter("temp.dat");
				
				DataInputStream dis = new DataInputStream(
						new BufferedInputStream(
						new FileInputStream("file.dat")));

				while( (temp = dis.readLine() )!=null){
					if(  temp.equals(String.valueOf(j) ) ){
						System.out.println("删除"+j);
					}else{				
						fw.write(temp+"\r\n");
						System.out.println("复制"+String.valueOf(temp)+"到temp.dat");
					}
				}
				fw.close();
				dis.close();
			}catch(EOFException eof){
				System.out.println("文件读取结束");
			}catch(NullPointerException npe){
				npe.printStackTrace();
			}catch(Exception e){
				System.out.println("其他错误");
			}
			
			File f1 = new File("file.dat");
			File f2 = new File("temp.dat");
			f1.delete();
			f2.renameTo(f1);
				
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadDemo td = new ThreadDemo();
		
		td.t1.run();
		td.t2.run();
		td.t3.run();
		td.t4.run();

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值