方式1:
public class LiftOff implements Runnable { protected int countDown = 10; private static int taskCount = 0; private final int id = taskCount++; public LiftOff() { System.out.println("LiftOff Start:"+Thread.currentThread().getId()); } public LiftOff(int countDown) { this.countDown = countDown; } public String status() { System.out.println("LiftOff tid:"+Thread.currentThread().getId()); return "#" + id + "(" + (countDown > 0 ? countDown : "Liftoff!") + "),"; } public void run() { while (countDown-- > 0) { // System.out.print(); status(); //Thread.yield(); } System.out.println("LiftOff End:"+Thread.currentThread().getId()); } }
public class BasicThreads { public static void main(String[] args){ System.out.println("main tid:"+Thread.currentThread().getId()); Thread t=new Thread(new LiftOff()); t.start(); System.out.println("Waiting for LiftOff"); } }
方式2(首选):
不限制数量的线程池
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CachedThreadPool { public static void main(String[] args) { ExecutorService exec=Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { exec.execute(new LiftOff()); } exec.shutdown(); } }
方式3:
限制数量的线程池
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FixedThreadPool { public static void main(String[] args) { ExecutorService exec=Executors.newFixedThreadPool(5); for (int i = 0; i < 10; i++) { exec.execute(new LiftOff()); } exec.shutdown(); } }
方式4:
线程顺序执行
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SingleThreadExecutor { public static void main(String[] args) { ExecutorService exec = Executors.newSingleThreadExecutor(); for (int i = 0; i < 5; i++) { exec.execute(new LiftOff()); } exec.shutdown(); } }
原文:http://www.cnblogs.com/zhuawang/p/3590259.html