JAVA 同步代码块和同步函数

来源:互联网 发布:淘宝微淘如何发买家秀 编辑:程序博客网 时间:2024/05/01 00:36
执行资格:开启的线程 但未执行,正在等待执行叫做具有执行资格。 但没有执行权。
执行权:正在执行的线程叫做具有执行权。(同时具有执行资格)
线程安全问题:
在多个线程开启的时候可能会出现一条线程刚执行某个函数的第一条语句就被跳转,下一条线程开始执行,比如第一条线程刚执行if语句 但没执行if后面的语句就没有了执行权,第二条线程开始执行。等第一条线程再执行的时候 可能数据已经发生了变化。从而导致安全问题。

同步函数和同步代码块都是为了解决线程安全问题。


同步代码块
通过同步代码块解决了线程安全问题。通过同步代码块,当线程进入同步代码块后,只有当这条线程执行完同步代码块中全部内容其他线程才可以进入同步代码块,在这期间即使在同步代码块中的线程失去执行权其他拥有执行权的线程也不能进入同步代码块。
解决了线程安全问题
但降低了效率,当一条线程在同步代码块中没有执行权的时候另一条拥有执行权的线程又不能执行功能,只能等再跳转会同步代码块中的线程再去执行,中间等待的时间就是浪费的效率。
synchronization(对象)  对象时任意的 只要保证多个线程使用同一个对象就行。


同步函数
同步函数就是将要执行的代码封装到函数中。

同步函数后面的对象就是this 而且是不能改变的。


使用比较多的是同步代码块,因为同步代码块的对象是可以改变的。而同步函数可以说是同步代码块的一种简写形式。它把对象固定为this。

0 0