线程

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、死锁

出现情景:有锁嵌套、

所以,我们在写锁的时候不要让两个锁嵌套起来。

posted @   Linqylin  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示