java如何实现线程的安全:线程的同步机制

方法一:同步代码块
synchronized(同步监视器){
//需要被同步的代码块(即为操作共享数据的代码)
}
1.共享数据:多个线程共同操作的同一个数剧(变量)
2.同步监视器:由一个类(任何一个类)的对象来充当,哪个线程获取此监视器,谁就执行大括号里被同步的代码。俗称:锁
3.这个类的对象一定要是成员变量,不能是局部变量,简单来说这个类的对象不能再run()方法里去声明,要在run()的外边,保证所有线程公用这个对象,不然无法同步!谁调run()方法谁就会创建一个处于自己的那个类的对象。即:所有的线程公用同一把锁
4.这个对象可以直接写个this,表示用当前对象来作为锁(这里要区分是用那种方式来写的子线程,实现Runable接口的方式可以使用,继承的方式慎用,以为可能是多个对象,this就不是同一个了)
5.共享数据很重要,不能多也不能少,不然会出问题的
方法二:同步方法
1.将操作共享数据的方法声明为synchronized。即此方法为同步方法,能够保证其中一个线程执行此方法时,其他线程在外等候直至此线程执行完此方法
2.同步方法的锁:this
3.对于静态方法而言,可以使用当前类本身充当锁(类名.class)这是利用了反射
同步方法(非静态)的锁为:this
同步方法(静态)的锁为:当前类本身
死锁问题的解决:
1.专门的算法原则
2.尽量减少同步资源的定义
线程通信:
1.wait()、notify()、notifyAll()这三个方法只有在 synchronized方法或synchronized代码块中才能使用,否则会报异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值