高分悬赏:Java语言编写一个多线程的例子程序给我,要完整,要求如下:
(1)分为10个以上的不同的线程,每个做不同的事情
(2)每个线程执行的时间超过10秒钟
(3)主程序触发所有的线程同时执行
(4)线程执行不能卡,需要回报其中的结果到主程序。
把http://www.mamicode.com/info-detail-50277.html 的代码粘贴上去
这篇文章讲解的很详细。
Test类
public static void main(String[] args) throws ExecutionException, InterruptedException {
exeThread(new Thread1(), new Thread2(), new Thread3());
}
private static void exeThread(Callable... threads) throws InterruptedException, ExecutionException {
List<FutureTask> list = new ArrayList<>();
for (Callable c: threads) {
FutureTask<String> task = new FutureTask<String>(c);
new Thread(task).start();
list.add(task);
}
System.out.println("执行中。。。。。。。");
for (FutureTask item: list) {
System.out.println("task return:" + item.get());
}
}
thread类
package thread;
import org.omg.Messaging.SyncScopeHelper;
import java.util.concurrent.Callable;
public class Thread1 implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("threa1正在执行。。。。。。。。。。");
Thread.sleep(5000);
return "thread1执行完毕";
}
}
package thread;
import java.util.concurrent.Callable;
public class Thread2 implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("threa2正在执行。。。。。。。。。。");
Thread.sleep(5000);
return "thread2执行完毕";
}
}
package thread;
import java.util.concurrent.Callable;
public class Thread3 implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("threa3正在执行。。。。。。。。。。");
Thread.sleep(5000);
return "thread3执行完毕";
}
}
get方法为阻塞方法,运行这个方法时会等待这个线程执行完毕
我写的是 :主线程 产生10个子线程 分别去读不同的文件内容,子线程读完文件之后 把结果返回给主线程
下面的是主线程TestMain.java 我使用的是测试Junit
package com.ccg.test;
import org.junit.Test;
public class TestMain {
@Test
public void TestMain() throws InterruptedException{
String f1 = "E:\\txt\\A.txt";
for(int i=0;i<10;i++)
{
System.out.println(f1.replace('A', String.valueOf(i).charAt(0)).toString());
new Thread(new CallbackThread(new TestMain(), f1.replace('A', String.valueOf(i).charAt(0)),i)).start();
}
}
public void receiveFileStr(String fileName,String readStr){
StringBuffer sb = new StringBuffer();
sb.append(fileName + ":" + readStr);
System.out.println(sb.toString());
}
}
下面的是子线程代码:CallbackThread.java
package com.ccg.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class CallbackThread implements Runnable{
private String fileName;
private TestMain callBack;
private long millis;
public CallbackThread(TestMain callBack,String fileName,long millis) {
this.fileName = fileName;
this.callBack = callBack;
this.millis=millis;
}
@Override
public void run() {
try {
File file = new File(fileName);
InputStreamReader in = new InputStreamReader(new FileInputStream(file),"gbk");
BufferedReader br = new BufferedReader(in);
String str = br.readLine();
//通知线程调用者run方法执行结果
callBack.receiveFileStr(fileName,str);
} catch (Exception e) {
e.printStackTrace();
}
}
}