我有两个线程:一个用于填充数组,另一个用于打印。似乎两个线程无法同时工作。
当我运行代码时,其打印第一个线程工作,然后其打印数组和第二个线程工作,我如何知道它们是否在同一时间工作?
这是我的代码:
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
firstthread f=new firstthread();
secondthread s=new secondthread();
s.start();
f.start();
}
}
并且该类同时包含fill和print方法:
public class Array {
private static int [] ar=new int[500];
public static void fillarray()
{
for (int i = 0; i < ar.length; i++)
ar[i]=i;
}
public static void printarray()
{
for (int i = 0; i < ar.length; i++)
System.out.print(ar[i]+" ");
}
}
第一个线程类:
public class firstthread extends Thread{
public void run() {
Array.fillarray();
System.out.print("first thread working ");
}
}
第二个线程类:
public class secondthread extends Thread{
public void run() {
Array.printarray();
System.out.println("second array working");
}
}
最佳答案
您想要实现生产者-消费者问题的解决方案...坦白地说,如果不锁定对象的监视器,则您无权控制任何事情。您无法控制线程执行的时间(提供给它的Timeslice)。如果时间片太长,您会感到一个线程接一个线程执行,因为您的处理器太快了,您的第一个线程将有足够的时间来完成其工作。如果您想知道线程如何正常工作,请使用wait()和notify()以及同步方法将其更改为生产者-消费者问题。
珍妮也是对的,您可以放下sleep(),它有90%的可能会起作用。
您可以增加要填充/打印的元素的数量。
如果您不使用同步/等待/通知,那么您阅读的内容有70%的机会要多于所写内容(填写在数组中)。