目录

3种方式

Concurrent工具包

Runnable和Thread的比较


3种方式
  • 继承 Thread 类
  • 实现 Runnable接口
  • 通过java.util.concurrent 包中的ExecutorService、Callable、Future 实现带返回结果的多线程。

 

Concurrent工具包

英[kənˈkʌrənt]  (JDK1.5推出的)

concurrent包很好的解决了这些问题,为我们提供了更实用的并发程序模型。

Executor :具体Runnable任务的执行者。

ExecutorService :一个线程池管理者,其实现类有多种,我会介绍一部分。我们能把Runnable,Callable提交到池中让其调度。

Semaphore :一个计数信号量

ReentrantLock :一个可重入的互斥锁定 Lock,功能类似synchronized,但要强大的多。

Future :是与Runnable,Callable进行交互的接口,比如一个线程执行结束后取返回的结果等等,还提供了cancel终止线程。

BlockingQueue :阻塞队列。

CompletionService : ExecutorService的扩展,可以获得线程执行结果的

CountDownLatch :一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

CyclicBarrier :一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点

Future  :Future 表示异步计算的结果。

ScheduledExecutorService :一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。

 

Runnable和Thread的比较

(1)相同点:  

都是“多线程的实现方式”。  

(2)不同点:  

Thread 是类,而Runnable是接口;

Thread本身是实现了Runnable接口的类。我们知道“一个类只能有一个父类,但是却能实现多个接口”,因此Runnable具有更好的扩展性。此外,Runnable还可以用于“资源的共享”。即,多个线程都是基于某一个Runnable对象建立的,它们会共享Runnable对象上的资源。  通常,建议通过“Runnable”实现多线程