[英]How to make two threads work in same time
我有兩個線程:一個用於填充數組,第二個用於打印。 似乎兩個線程不能同時工作。
當我運行代碼時,其打印第一個線程工作,然后其打印數組和第二個線程工作,我如何知道它們是否在同一時間工作?
這是我的代碼:
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");
}
}
fillarray和printarray方法運行速度太快,因此您不會獲得線程。
將Thread.sleep(10)添加到每個循環。 這樣,代碼將運行得慢得多,並且線程將相互穿插。 他們可能會采用這種方法。
然后進入隨機睡眠#秒,您將看到不同的行為。
啟動線程需要花費一些時間到JVM。 第一個線程比另一個線程啟動執行它的run()方法更快。 這就是為什么您看到這種行為。
您想要實現生產者-消費者問題的解決方案...坦白地說,如果不鎖定對象的監視器,則您無權控制任何事情。 您無法控制線程執行的時間(提供給它的Timeslice)。 如果時間片過長,您會感到一個線程接一個線程執行,因為您的處理器太快了,您的第一個線程將有足夠的時間來完成其工作。 如果您想知道線程如何正常工作,請使用wait()和notify()以及同步方法將其更改為生產者-消費者問題。
問題尚不清楚。 您是說如何分辨它們是否在同一陣列上工作? 如果是這樣,答案是肯定的。 該數組是靜態的,這意味着只有一個屬於類數組。 因此,不會有多個實例被不同的線程處理。
如上所述,線程運行非常快。 因此,即使他們正在訪問同一對象,一個線程也將在第二個線程開始之前完成其工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.