/*
直接調用run方法是不會產生多綫程的
四種創建綫程的方法中只有繼承了thread的這種可以將自身看成一個綫程對象直接創建並使用。
而第三種方法,實現了callable接口的方法要通過future task進行包裝才能放到thread中并且他是有返回值的
*/
package Threadtest;
import java.util.concurrent.*;
public class ThreadTest1 {
public static void main(String[] args) {
//new Thread(new r()).start();
// new r().run();
// new r().start();
// new r2().run();
// new Thread(new r2()).start();
// FutureTask<String> f = new FutureTask<String>(new r3());
// new Thread(f).start();
// try {
// System.out.println(f.get());
// } catch (InterruptedException e) {
// e.printStackTrace();
// } catch (ExecutionException e) {
// e.printStackTrace();
// }
ExecutorService executorService = Executors.newFixedThreadPool(20);
for (int i = 0; i < 20; i++) {
executorService.submit(new r3());
}
executorService.shutdown();
for (int i = 0; i < 20; i++) {
System.out.println("main"+i);
}
}
}
class r extends Thread{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("thread"+i);
}
}
}
class r2 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("r2"+i);
}
}
}
class r3 implements Callable<String>{
@Override
public String call() throws Exception {
for (int i = 0; i < 20; i++) {
System.out.println("r3"+i);
}
return "r3";
}
}
多綫程的内存表述圖片

289

被折叠的 条评论
为什么被折叠?



