public class wshop8 {
public static void main(String[] args) {
SearchThread[] threads = new SearchThread[5];
String[][] s = {
{ "java", "I love java", "c++", "python" },
{ "c programs", "cookies", "java developers", "oops"},
{ "john", "doe", "mary", "mark holmes"},
{ "hello java java", "byebye", "java again?", "what?"},
{ "toronto", "montreal", "quebec city", "calgary"}
};
for(int i=0;i<threads.length;i++){
threads[i] = new SearchThread( s[i] ); //Insert each line of String s into threads array
threads[i].start(); //Threads begin...
}
for(int i=0;i<threads.length;i++){
try{
threads[i].join();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class SearchThread extends Thread{
private String[] search;
public SearchThread(String[] search){this.search = search;}
public synchronized void run(){
for(int i=0;i<search.length;i++){
System.out.print(search[i]+" ");
}
System.out.println();
}
}
您好。以上是我目前制作的代码..
每次编译程序时,它都会给出随机的输出序列。
我认为线程互相拦截。
让程序从s [0]输出字符串到[4]的任何提示?
我也试图设定优先权,但我失败了。
以下是我尝试过的另一个版本。 (不使用obj线程的数组) 但也随机输出。
public class wshop8 {
public static void main(String[] args) {
SearchThread thread;
String[][] s = {
{ "java", "I love java", "c++", "python" },
{ "c programs", "cookies", "java developers", "oops"},
{ "john", "doe", "mary", "mark holmes"},
{ "hello java java", "byebye", "java again?", "what?"},
{ "toronto", "montreal", "quebec city", "calgary"}
};
for(int i=0;i<5;i++){
thread = new SearchThread( s[i] ); //Insert each line of String s into threads array
thread.start(); //Threads begin...
}
}
}
class SearchThread extends Thread{
private String[] search;
public SearchThread(String[] search){this.search = search;}
//override
public synchronized void run(){
for(int i=0;i<search.length;i++){
System.out.print(search[i]+" ");
}
System.out.println();
}
}
答案 0 :(得分:1)
这个问题有两种解决方案,第一种是简单地使用一个线程,这样就可以将字符串从s [0]输出到s [4]。第二个是向Object
类
SearchThread
private static Object objectUsedForSynchronization=new Object();
然后在run方法内部同步objectUsedForSynchronization上的内容:
public void run(){
synchronize(objectUsedForSynchronization){
for(int i=0;i<search.length;i++){
System.out.print(search[i]+" ");
}
System.out.println();
}
}