java 多线程内容总结:
1.多线程的创建
2.中断线程
3.线程状态
3.线程属性
4.同步
5.阻塞队列
一,.线程的创建
有两种方式,继承Thread类或者实现Runnable接口
两者区别
1.java是单继承的,只能继承一个类,
2.不能共享实例变量
三,线程状态
New(新创建)
Runnable(可运行)
Blocked(被阻塞)
Waiting(等待)
Timed Waiting(计时等待)
Terminated(被终止)
新创建线程:当用new操作符时线程处于新创建状态,线程还没开始,如 new Thread (r),运行之前还有一些基础工作要做
可运行:一旦调用start方法线程即可进入可运行状态,有可能运行,也没运行,取决于操作系统给提供的时间片
被阻塞线程:当一个线程试图获取一个内部的对象锁,而该锁被其他对象持有,即进入阻塞状态,当其他线程释放该锁的时候,线程调度器分配给本锁的时候处于非阻塞状 态
线程等待:等待另一个线程通知调度器一个条件时,进入等待状态,在调用Object.wait() Thrad.join() Lock condition
线程计时等待:有几个方法有计时等待作用,一直等到时间到或者是受到适当的通知,该类方法有: Thread.sleep(),Object.wait(),Thread.join(),Lock.tryLock(),Condition,await()
线程被终止:
1.run()方法运行结束,正常退出
2.因为一个异常而死亡
如何更好的退出线程在后续的专门文章里详写
四.线程的属性
1.线程优先级
2.守护线程
线程优先级:线程调度器选择线程是他会选择优先级高的线程
yield()
导致当前线程处于让步状态
守护线程:为其他线程提供服务
五,线程同步
如何做到同步:
1.锁对象
2.条件对象
3.synchronized
public class test(){
private Lock testLock=new ReentrantLock();
public void update(){
testLock.lock();
try{
//做一些更新操作
}catch(){
}finally{
testLock.unLock();
}
}
}
一旦一个线程封锁了锁对象,其他任何线程都无法获得操作机会,进入阻塞状态,直到该线程释放该锁
public class test(){
private Lock testLock;
private Condition testCondition;
public test(){
testLock=new ReentrantLock();
testCondition=testLock.newCondition();
}
public void update(){
testLock.lock();
try{
while(一些条件){
testCondition.await();
}
//做一些更新操作
testCondition.signalAll();
}catch(){
}finally{
testLock.unLock();
}
}
}
线程进入临界区之后发现满足某一条件之后才能运行
条件对象管理哪些已经获得了但是不能做有用工作的线程
signalAll()方法之后不能立马激活一个线程,只是解除等待的阻塞状态
3.synchronized
public synchronized void method(){
while(条件){
wait();
//
notifyAll()
}
}
每个对象都有一个内部锁,并且该锁都有内部对象
同步阻塞
public void update(){
synchronized( obj ){
///
///
}
}
六,阻塞队列
专门在其他文章里详解