多线程

线程6中状态:

New(新生):用new操作符创建一个新线程

Runnable(可运行):一旦调用start方法,线程处于该状态

Blocked(被阻塞):当一个线程试图获取一个内部的对象锁,而改锁被其他线程持有,则该线程进入阻塞状态,当所有其他线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。

Waiting(等待):当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态(调用 Object.wait、Thread.join,等待java.util.concurrent库中的Lock或Contition)

Time waiting(计时等待):这一状态将一直保持到超时期满或者接收到适当的通知

Terminated(被终止):

1、因为run方法正常退出而自然死亡

2、因为一个没有捕获的异常终止了run方法而意外死亡

 

线程优先级:1-10优先级从低到高,缺省为5

守护线程:void setDaemo(boolean isDaemo) 该方法必须在线程启动之前调用

 

yeild方法导致当前线程处于让步状态,让同等级或更高的线程执行

 

Lock/Condition

lock/unlock:发生阻塞。锁是可重入的,锁保持一个持有计数,一个锁保护的代码可以调用另一个使用相同的锁的方法

条件对象:一个锁对象可以有一个或多个相关的条件对象,导致阻塞

Lock lock = new ReentrantLock();        //构建一个可以被用来保护临界区的可重入锁

Condition condition = lock.newCondition();  //返回一个与该锁相关的对象

lock.lock();                  //获取这个锁,如果锁同时被另一个线程拥有则发送阻塞

condition.await();                //将线程放到条件的等待集中

condition.signAll();              //解除该条件的等待集中所有线程的阻塞状态

condition.signal();               //从该条件的等待集中随机地选择一个线程,解除其阻塞状态

lock.unlock();                  //释放这个锁

 

 

每个对象都有一个内部锁,内部对象锁只有一个相关条件

有锁来管理那些试图进入synchronzied方法的线程,有条件来管理那些调用wait的线程

wait notifyAll notify方法是Object的final方法

 

 

stop方法导致对象处于不一致的状态,破坏了对象

suspend不会破坏对象

 

阻塞队列,java.util.concurrent

 

 

线程池:一个线程池包含许多准备运行的空闲线程,将Runnable对象交给线程池,就会有一个线程调用run方法,当run方法退出时,线程不会死亡,而是在池中准备下一个请求提供服务。线程池可以减少并发线程的数目

 

posted @ 2015-04-01 13:49  QinH  阅读(334)  评论(0编辑  收藏  举报