JAVA用线程编写一个读写文件的程序,允许多个读者同时读文件,仅允许一个读者写文件。程序没输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA用线程编写一个读写文件的程序,允许多个读者同时读文件,仅允许一个读者写文件。程序没输出相关的知识,希望对你有一定的参考价值。

import java.util.logging.Level;
import java.util.logging.Logger;

public class ReaderWriter implements Runnable
final static int num=5;
final int time=100;
ReaderWriter reader[]=new ReaderWriter[num];
public void Read()
System.out.println("is reading file");
try
Thread.sleep(time);
catch (InterruptedException ex)
Logger.getLogger(ReaderWriter.class.getName()).log(Level.SEVERE, null, ex);


public synchronized void Write()
System.out.println("is writting file");
try
Thread.sleep(time);
catch (InterruptedException ex)
Logger.getLogger(ReaderWriter.class.getName()).log(Level.SEVERE, null, ex);


ReaderWriter()
Thread t[]=new Thread[num];
for(int i=0;i<num;i++)

t[i]=new Thread(reader[i]);
t[i].start();



public void run()
System.out.println("xi");//这个都没有输出,是不是run方法根本没运行?
while(true)
Read();
Write();


public static void main(String []args)
new ReaderWriter();

参考技术A 你好,很小的错误,子线程没有运行

public static void main(String []args)
new ReaderWriter();

改为
public static void main(String []args)
new Thread(new ReaderWriter()).start();
追问

ReaderWriter()
Thread t[]=new Thread[num];
for(int i=0;i<num;i++)

t[i]=new Thread(this);//我把reader[i]改成this就可以运行了,reader[i]也是这个类的对象,为什么传进去不能启动进程呢?
t[i].start();

追答

你好,如果是你上面的代码,

for (int i = 0; i < num; i++)
t[i] = new Thread(reader[i]);
t[i].start();


你可以在t[i] = new Thread(reader[i]);前加一句System.out.println(reader[i]==null);

你会发现结果都是true,所以这就是线程不能启动的原因

追问

谢谢你,也就是说空对象不能启动线程。这个程序创建了5个线程,假如分别叫线程1,2,3,4,5.在调用Read和Write方法时会打印出是哪个线程调用的,应该怎么做啊?

本回答被提问者采纳
参考技术B 线程的使用有两种方式,第一种是集成Thread类,第二种就是实现Runnable 接口
运行实现Runnable 接口的程序,必须使用 线程 例如 new Thread(new ReaderWriter()).start();
还有就是线程的状态你没有掌握,建议你去学习下。
参考技术C public static void main(String []args)
(new Thread(new ReaderWriter())).start(); //自己去查资料,Runnable与Thread的区别和共同

以上是关于JAVA用线程编写一个读写文件的程序,允许多个读者同时读文件,仅允许一个读者写文件。程序没输出的主要内容,如果未能解决你的问题,请参考以下文章

java读写锁实现数据同步访问

线程同步之读写锁(锁操作的补充)

用信号量和读写锁解决读者写者问题

多线程编程之读写锁

线程同步互斥锁和读写锁的区别和各自适用场景

线程同步之读写锁