Java 并发:基本的线程机制

来源:互联网 发布:淘宝客服真的好忙好累 编辑:程序博客网 时间:2024/05/21 19:50

本文非真正原创,算是《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() */@Overridepublic 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

原创粉丝点击