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();
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用线程编写一个读写文件的程序,允许多个读者同时读文件,仅允许一个读者写文件。程序没输出的主要内容,如果未能解决你的问题,请参考以下文章