同步
当两个或多个想成需要访问共享资源时,他们需要以某种方式确保每次只有一个线程使用资源。是先这一目的的过程称为同步。
同步的关键是监视器的概念,监视器是所有用作互斥锁的对象。在给定时刻,只有一个线程可以拥有监视器。当线程取得锁时,也就是进入了监视器。其他所有企图进入加锁监视器的线程都会被挂起,直到第一个线程退出监视器。也就是说,这些等待的其他线程在等待监视器。
可以使用两种方法同步代码。这两种方法都要用到synchronized关键字。
使用同步方法
在Java中进行同步很容易,因为所有对象都有与他们自身关联的隐式监视器。只需要使用synchronized关键字修饰过的方法。
public synchronized void methodName() {
}
使用同步代码块
synchronized (objRef){
}
objRef可以使用任意对象。
同步方法与同步代码块的区别
同步代码块的锁是任意对象。
同步方法的锁是this。
synchronized 关键字可以加载静态方法上,那么加载静态方法上他的锁对象是当前类的class文件。
因为静态方法是随着类的加载而加载。
总结
进程:正在执行的应用程序
线程:进程的执行单元,执行路径
单线程:一个应用程序只有一条执行路径
多线程:一个应用程序有多条执行路径
Java程序的运行原理以及jvm的启动是多线程吗?
A:Java命令去启动jvm,jvm会启动一个进程,该进程会启动一个主线程。
B:jvm的启动是多线程的,因为它最低有两个线程启动,主线程和垃圾回收线程。
多线程的实现方案
A:继承Thread类
B:实现Runnable接口
线程的调度和优先级问题
A:线程调度
a:分时调度
b:抢占式调度
B:获取和设置线程优先级问题
a:默认是5
b:范围是1-10
线程的控制方法
A:休眠线程
B:加入线程
C:礼让线程
D:后台线程
E:终止线程
线程的生命周期
A:新建
B:就绪
C:运行
D:阻塞
E:死亡