您的位置:首页 > 编程语言 > Java开发

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

2017-01-21 15:37 531 查看
方法一:同步代码块

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代码块中才能使用,否则会报异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 线程