本文非真正原创,算是《Thinking in Java》的笔记吧。
一 实现一个最简单的线程
public 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;
}
public String status() {
return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff!") + ")";
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
while (countDown-- > 0) {
System.out.println(status());
Thread.yield(); // 告诉CPU可以进行线程切换。
}
}
}
然后,你以后再调用以下代码就可以开启一个新线程。下面代码调用t.start()函数之后就会执行 LiftOff类的run函数。
Thread t = new Thread(new LiftOff());
t.start();
二 线程池的使用
线程池可以提高资源的利用率,重复利用旧线程。还会从缓存中移除60秒未调用的线程。代码示例如下:
private static void testExecutorService() {
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
executorService.execute(new LiftOff());
}
executorService.shutdown();
}
三 排队线程:SingleThreadExecutor
SingleThreadExecutor可以被提交多个Thread,但是一次只能执行一个线程,且线程要按照先进先出的执行依次。代码示例如下:
private static void testSingleThreadExecutor() {
ExecutorService executorService = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
executorService.execute(new LiftOff());
}
executorService.shutdown();
}
四 还有FixedThreadPool
顾名思义,就是同时只能执行固定个数的线程。
參考: