您的位置:首页 > 编程语言 > Java开发

Java 并发:基本的线程机制

2013-11-20 19:47 357 查看
本文非真正原创,算是《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

     顾名思义,就是同时只能执行固定个数的线程。

參考:

http://www.cnblogs.com/adm1989/p/3293233.html

http://jiahua8859-163-com.iteye.com/blog/988193
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: