new Thread(new Runnable() {
public void run() {
System.out.println("Look ma, no hands");
}
}).start();
new Thread(new Runnable() {
public void run() {
System.out.println("Look at me, look at me...");
}
}).start();
うまく動作します...
個人的にはExecutorServiceを使用したいと思います。
ExecutorServiceの例で更新
だから私はこの本当に簡単な例を書きました...
基本的には、を使用しExecutorService
ていくつかの簡単なタスクを実行します。現状では、両方のタスクが互いに並行して(同時に)実行されます。
public static void main(String[] args) throws InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(2);
service.submit(new PathScanner());
service.submit(new Counter());
service.shutdown();
service.awaitTermination(1, TimeUnit.DAYS);
System.exit(0);
}
public static class PathScanner implements Callable<Object> {
@Override
public Object call() throws Exception {
scan(new File("C:/"), 0);
return null;
}
protected void scan(File path, int deepth) {
if (deepth < 15) {
System.out.println("Scanning " + path + " at a deepth of " + deepth);
File[] files = path.listFiles();
for (File file : files) {
if (file.isDirectory()) {
scan(file, ++deepth);
}
}
}
}
}
public static class Counter implements Callable<Object> {
@Override
public Object call() throws Exception {
for (int index = 0; index < 1000; index++) {
Thread.sleep(1);
System.out.println(index);
}
return null;
}
}
それを実行します...
に変更ExecutorService service = Executors.newFixedThreadPool(2);
してExecutorService service = Executors.newFixedThreadPool(1);
、もう一度実行します。違いがわかりましたか?
これは、エグゼキュータがキューの処理中に同時に使用できるスレッドの数を制御する方法です。
さらにいくつかのタスクを作成し、それらをキューに追加して、何が得られるかを確認します。