Runnable
import java.util.concurrent.*;
class LiftOff implements Runnable {
protected int countDown =10;
private static int taskCount = 0;
private final int id = taskCount++;
public LiftOff() {};
public LiftOff(int countDown) {
this.countDown = countDown;
}
private String status() {
return "#" + id + "(" + (countDown>0? countDown: "LiftOff!") + "),";
}
public void run() {
while(countDown-->0){
System.out.print(status());
Thread.yield();
}
}
}
public class ThreadDemo {
public static void main(String... args) {
for(int i=0; i<5; i++) {
Thread t = new Thread(new LiftOff());
t.start();
}
}
}
Result:
#0(9),#3(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(LiftOff!),#2(9),#1(9),#3(8),#3(7),#3(6),#3(5),#3(4),#3(3),#3(2),#3(1),#3(LiftOff!),#2(8),#1(8),#2(7),#1(7),#2(6),#1(6),#2(5),#1(5),#2(4),#2(3),#2(2),#1(4),#1(3),#1(2),#1(1),#1(LiftOff!),#2(1),#2(LiftOff!),#4(9),#4(8),#4(7),#4(6),#4(5),#4(4),#4(3),#4(2),#4(1),#4(LiftOff!),
Thread
import java.util.concurrent.*;
class LiftOff extends Thread {
protected int countDown =10;
private static int taskCount = 0;
private final int id = taskCount++;
public LiftOff() {};
public LiftOff(int countDown) {
this.countDown = countDown;
}
private String status() {
return "#" + id + "(" + (countDown>0? countDown: "LiftOff!") + "),";
}
public void run() {
while(countDown-->0){
try{
System.out.print(status());
TimeUnit.MILLISECONDS.sleep(100);
} catch(InterruptedException e) {
System.err.println("Interrupted");
}
}
}
}
public class ThreadDemo {
public static void main(String... args) {
for(int i=0; i<5; i++) {
Thread t = new LiftOff();
t.start();
}
}
}
Executors
import java.util.concurrent.*;
class LiftOff implements Runnable {
protected int countDown =10;
private static int taskCount = 0;
private final int id = taskCount++;
public LiftOff() {};
public LiftOff(int countDown) {
this.countDown = countDown;
}
private String status() {
return "#" + id + "(" + (countDown>0? countDown: "LiftOff!") + "),";
}
public void run() {
while(countDown-->0){
System.out.print(status());
Thread.yield();
}
}
}
public class RunnableDemo {
public static void main(String... args) {
ExecutorService exec = Executors.newCachedThreadPool();
for(int i=0; i<5; i++) {
exec.execute(new LiftOff());
}
exec.shutdown();
}
}
Callable
import java.util.concurrent.*;
import java.util.*;
class TasksWithResult implements Callable<String> {
private int id;
public TasksWithResult(int id) {
this.id = id;
}
public String call() {
return "result of TasksWithResult: " + id;
}
}
public class CallableDemo {
public static void main(String... args) {
ExecutorService exec = Executors.newCachedThreadPool();
ArrayList<Future<String>> results = new ArrayList<Future<String>>();
for(int i = 0; i < 5; i++) {
results.add(exec.submit(new TasksWithResult(i)));
}
for(Future<String> fs: results) {
try{
System.out.println(fs.get());
} catch(Exception e) {
System.out.println(e);
return;
} finally {
exec.shutdown();
}
}
}
}