转自:http://www.lifevv.com/java/doc/20071025183748112.html?page=1
范例解说Java里的线程概念与线程同步技术
本文以通俗易懂的范例入手,由浅入深的全面介绍了Java里的线程概念与线程同步技术。 |
线程 是一段完成某个特定功能的代码,程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。 线程与进程的区别: 本文将介绍以下线程方面的知识: 理解线程的最有效的方法是通过实例来理解。下面我们将通过 售货员售书 为例,由浅入深地介绍线程的创建,通信,锁机制等概念。 售货员售书 清单1:
Book.java public class Book {
private String name; private boolean sold = false; public Book(String name) { public void setName(String name) { public boolean isSold() { public void setSold(boolean sold) { SellBookRunnable.java
import java.util.List;
public class SellBookRunnable implements Runnable { public SellBookRunnable(String saleMan, List<Book> bookList) { public void run() { /** } SellBookThread.java
import java.util.List;
public class SellBookThread extends Thread { public SellBookThread(String saleMan, List<Book> bookList) { public void run() { /** } CallSellBook.java
import java.util.ArrayList;
import java.util.List; //该类调用SellBookXxx类 /** //or //售货员SaleMan1开始售书 //售货员SaleMan1开始售书 //准备预售书籍 执行CallSellBook [SaleMan1]Book0 sold out:true. by Thread-0
[SaleMan2]Book1 sold out:true. by Thread-1 [SaleMan2]Book2 sold out:true. by Thread-1 [SaleMan2]Book3 sold out:true. by Thread-1 [SaleMan2]Book4 sold out:true. by Thread-1 [SaleMan2]Book5 sold out:true. by Thread-1 [SaleMan1]Book6 sold out:true. by Thread-0 [SaleMan1]Book7 sold out:true. by Thread-0 [SaleMan1]Book8 sold out:true. by Thread-0 [SaleMan1]Book9 sold out:true. by Thread-0 [SaleMan1]Book10 sold out:true. by Thread-0 [SaleMan1]Book11 sold out:true. by Thread-0 [SaleMan2]Book12 sold out:true. by Thread-1 [SaleMan2]Book13 sold out:true. by Thread-1 [SaleMan2]Book14 sold out:true. by Thread-1 [SaleMan2]Book15 sold out:true. by Thread-1 [SaleMan2]Book16 sold out:true. by Thread-1 [SaleMan2]Book17 sold out:true. by Thread-1 [SaleMan1]Book18 sold out:true. by Thread-0 [SaleMan1]Book19 sold out:true. by Thread-0 |
范例解说Java里的线程概念与线程同步技术
本文以通俗易懂的范例入手,由浅入深的全面介绍了Java里的线程概念与线程同步技术。 |
线程的创建
创建新执行线程有两种方法。 线程的状态
线程有四种状态:创建状态(New),可运行状态(Runnable),阻塞状态(Blocked),死亡状态(Dead)。 创建状态(New): 可运行状态(Runnable): 阻塞状态(Blocked): 使得线程处于阻塞状态(Blocked)。处于该状态的线程即使处理器空闲,也不会得到执行。 死亡状态(Dead):
线程的优先级:
可以通过Thread类的 线程组:
可以通过
线程unchecked异常处理器:
可以通过:
线程同步:
线程同步指多个线程同时访问某资源时,采用一系列的机制以保证同时最多只能一个线程访问该资源。 使用synchronized同步线程。 private void sellBook(Book book) {
synchronized (book) { ... } } 该例synchronized (book) 表示若多个线程同时访问时,只让其中一个线程最先取得book对象,其它线程则阻塞直到代码块执行完毕book对象被释放后,其它线程才能取得该book对象继续执行。 同步方法例: synchronized private void sellBook(Book book) {
... } 这种方法其实相当于 private void sellBook(Book book) {
synchronized(this) { ... } } 由于默认采用this作为同步对象,所以当一个类中有多个synchronized方法时,同样会存在以上问题:即如果有一个线程访问其中某个synchronized方法时,直到该方法执行完毕,其它线程对其它synchronized方法的访问也将受到阻塞。 使用java.util.concurrent.locks.ReentrantLock和java.util.concurrent.locks.ReentrantReadWriteLock类同步线程。 class X {
private final ReentrantLock lock = new ReentrantLock(); // ... public void m() { lock.lock(); // block until condition holds try { // ... method body } finally { lock.unlock() } } } 其它J2SE5.0新导入的有关线程的相关接口/类:
java.util.concurrent.Future java.util.concurrent.Callable java.util.concurrent.ExecutorService java.util.concurrent.FutureTask java.util.concurrent.Executor java.util.concurrent.Executors |