第一种:继承Thread 复写run方法安全
第二种:实现Runnable 覆写run方法this
第三种:实现Callable 覆写call方法spa
最经常使用的是第二中方法线程
区别:第二种和第三种方法的区别在于返回值,run方法是没有返回值的,可是call方法是能够带返回值对象
1.new 新建继承
2.调用start方法 就绪生命周期
3.获取资源 运行内存
4.资源不足或者未获取资源 阻塞资源
5.执行完毕 死亡同步
synchronized(obj){
须要保证安全的代码
}
eg: synchronized 返回类型 方法名(参数){方法体}
注:该方式默认使用this也就是当前对象做为同步锁的监听器
由于静态方法在内存中是惟一存在的,因此使用静态方法能够保证同一时间只会被一个线程所使用
此方法是jdk1.5后才拥有的,老古董的项目用不了
在建立对象时,建立一个同步锁,而后在须要保证线程安全的方法内调用lock方法,方法运行结束后调用unlock方法解锁
此方法默认使用Lock对象做为监听器
eg:
public class X {
//建立一个同步锁,一般使用ReentrantLock(可重入锁)。使用该对象能够显示地加锁和解锁
private final ReentrantLock lock = new ReentrantLock();
//须要保证线程安全的方法
public void m(){
//加锁
lock.lock();
try{
//... method body
}finally{
//在finally释放锁
lock.unlock();
}
}
}