Java多线程基础知识
并发基础
相关概念
1.进程
进程指的是正在运行的程序的实例
进程是程序的一次执行过程,或是正在执行的程序
是动态过程,有它自身的产生、存在和消亡的过程
2.线程
线程是有进程创建的, 是进程的一个实体,
线程是操作系统进行运算调度的最小单位,是进程的实际运行单位
一个进程可以拥有多个线程
3.并发
同一时刻多个任务交替执行(单核cpu实现的多任务就是并发)
4.并行
同一个时刻,多个任务同时执行(多核cpu可以实现并行)
线程的基本使用
创建线程
继承Thread类
Thread类本身就实现了Runnable接口
实现Runnable接口
实现Runnable接口更加适合多个线程共享一个资源的情况,且避免的单继承的限制
线程状态
NEW
新建,尚未启动的线程处于此状态
RUNNABLE
可运行,在Java虚拟机中执行的线程处于此状态
BLOCKED
阻塞,被阻塞等待监视器锁定的线程处于此状态(未获得锁)
WAITING
等待,等待另一个线程执行特定动作的线程处于此状态
TIMED_WAITING
计时等待,等待另一个线程执行特定动作达到指定等待时间的线程处于此状态
TERMINATED
终止,已退出的线程处于此状态
同步,线程的同步
锁对象
ReentrantLock类
varmyblock=newReentrantLock();//锁对象,重入锁
myblock.lock();
try{
dosomething
}finally{
myblock.unlock();
}
ReentrantLock(booleanfair)//公平锁,倾向于等待时间最长的线程
synchronized关键字
//同步代码块
synchronized(对象) {//得到对象锁才能操作代码块
//需要同步的代码;
}
//同步方法
publicsynchronizedvoidmethod() {
//需要同步的代码
}
// 同步方法(非静态的)的锁可以是this(默认),也可以是其他对象(但要确保多线程的锁对象是同一个对象)
// 同步方法(静态的)的锁为当前类本身 lei.class
释放锁
当前线程的同步方法、同步代码块执行结束
当前线程执行同步代码块、同步方法中遇到break、return时
当前线程执行同步代码块、同步方法中出现了未处理的Error或Exception,异常结束
当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并释放锁