1、线程的生命周期
2、线程的安全问题
因为线程在执行时,有随机性,CPU的执行权随时有可能被抢走。
解决方法:把操作共享的代码锁起来
3、同步代码块
把操作共享的代码锁起来
格式:
synchronized(锁){
操作共享数据的代码
}
特点1:锁默认打开,有一个线程进去了,锁自动关闭
特点2:里面的代码全部执行完毕,线程出来,锁自动打开
注意:锁对象一定要是唯一的,所以在定义的锁对象前加一个static静态关键字。
e.g static Object obj = new Object();
也可以直接把 当前类名.class作为锁对象,因为当前类名.class也是唯一的
4、同步方法
就是把synchronized关键字加到方法上,把方法的全部代码锁起来。
格式:
修饰符 synchronized 返回值类型 方法名(方法参数){...}
特点1:同步方法是锁住方法里面所有的代码
特点2:锁对象不能自己指定(非静态:this;静态:当前类的字节码文件对象)
补充:
将StringBuildder的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer。因为StringBuffer的方法是同步方法,而StringBuilder不是。
5、Lock锁
Lock lock = new ReentrantLock();
//加锁
lock.lock();
//释放锁
lock.unlock();
6、死锁
出现情景:有锁嵌套、
所以,我们在写锁的时候不要让两个锁嵌套起来。
标签:同步,synchronized,lock,代码,线程,方法 From: https://www.cnblogs.com/qiqi-yi/p/17262537.html