当前位置: 移动技术网 > IT编程>开发语言>Java > 放号器

放号器

2020年07月29日  | 移动技术网IT编程  | 我要评论

多线程放号器

1、

使用implements Runnable 实现线程操作
先创建一个文件从流中读取一个整数
随机获取号码,将号码写入文件
对号码同步化提高安全性不会出现重复的
在获取名字和号码输出


package com.softeem.examination3;

import java.io.EOFException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Random;



public class Hospital implements Runnable {
	
	private int num;
	private String cacheFile = "record.txt";
	private RandomAccessFile raf;
	
	{
		try {
			raf = new RandomAccessFile(cacheFile, "r");
			//从流中读取一个整数(上一次最后写入的号码)
			num = raf.readInt();
		} catch (FileNotFoundException e) {
			System.out.println("文件不存在,创建文件");
			try {
				new File(cacheFile).createNewFile();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}catch (EOFException e){
			//当从流中读取不到需要的内容时
			System.out.println("没有可读号码");
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
			if (raf != null)raf.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} {
				
			}
		}
	}
	
	@Override
	public void run() {
		while (true) {
			//对号码获取和变更需要同步加锁
			synchronized (this) {
				try {
					Thread.sleep(new Random().nextInt(100));
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			//对号码的获取和变更需要同步
			synchronized (this) {
			num++;
			System.out.println(Thread.currentThread().getName()+"取到号码"+num);
			try (RandomAccessFile reader = new RandomAccessFile(cacheFile, "rw")) {
				//将获取的号码写入文件
				//将文件指针设置到流的开头
				reader.seek(0);
				reader.writeInt(num);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			}
		}		
	}

	public static void main(String[] args) {
		Hospital sender = new Hospital();
		
		Thread t1 = new Thread(sender, "患者A");
		Thread t2 = new Thread(sender, "患者B");
		Thread t3 = new Thread(sender, "患者C");
		
		t1.start();
		t2.start();
		t3.start();

	}

}


本文地址:https://blog.csdn.net/weixin_49172078/article/details/107603950

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网