2.多线程(同步代码块,同步方法,Lock锁,线程的状态,等待唤醒机制)

发布时间 2023-09-24 16:02:46作者: 回家太晚太悲催

多线程(同步代码块,同步方法,Lock锁,线程的状态,等待唤醒机制)

同步代码块:

作用:
把操作共享数据的代码锁起来;
格式:
synchronized(锁对象){
	操作共享数据的代码
}

锁对象一定是唯一的;
特点:
  1. 锁默认打开,有一个线程进去了,锁自动关闭;
  2. 里面的代码全部执行完毕,线程出来,锁自动打开;

同步方法:

概述:
把操作共享数据的代码锁起来;
把synchronized关键字加到方法上
格式:
修饰符 synchronized 返回值类型 方法名(方法参数){...}
特点:
  1. 同步方法是锁住方法里面所有的代码;
  2. 锁对象不能自己指定;
    • 非静态: this;
    • 静态: 当前类的字节码文件对象;

Lock锁:

作用:
可以手动的把操作共享数据的代码锁起来或者释放;
实现:
Lock是接口不能直接实例化,这里是采用它的实现类ReentrantLock来实例化的;
void lock(): 获得锁
void unlock():	释放锁

线程的状态:

新建状态(NEW)				->		创建线程对象
就绪状态(RUNNABLE)			->		start方法
阻塞状态(BLOCKED)			->		无法获得锁对象
等待状态(WAITING)			->		wait方法
计时等待(TIME_WAITING)		->		sleep方法
结束状态(TERMINATED)		->		全部代码运行完毕

等待唤醒机制: