线程具有优先级
线程的优先级具有继承特性。被调用者继承调用者的优先级
优先级高的线程 绝大部分会现执行
方法内的变量是线程安全的。
多个线程访问同一个对象的同步方法时,一定是线程安全的。
synchronized取得的是对象锁 多个线程访问一个对象 Synchronized
如果一个资源不是共享的
A线程先持有object对象的Lock锁 B线程可以异步调用object对象中的非synchronized类型的方法
A线程先持有object对象的Lock锁 B线程如果也调用对象中的synchronized类型的方法 那么需要排队等待.
虽然在复制的时候进行了同步,但是在取之的时候如果不同步会出现意向不到的情况,会已经被其他线程更改过了.
可重入锁的概念是:自己可以再次获取自己的内部锁。比如有1条线程获得了一个对象锁,此时这个对象锁还没有释放,
当其想再次获得对象锁的时候还是可以获取的,要不然就会造成死锁的状态.
若线程执行过程中出现异常,则所持有的对象锁会自动释放.
如果父类是同步方法 而子类不是同步方法 那么子类是不能继承父类的同步方法的。
当然用Synchonized同步方法是有弊端的 有的时候需要用同步代码块来实现.
不在Synchonized块就是异步 在Synchonized就是同步
锁非this对象具有一定的优点:如果在一个类中有很多个Synchronized,这是虽然能同步,但是会受到阻塞,效率上面会大大降低
因此非this锁的意义就在在一个对象中,Synchonized可以锁定不同的对象 ,他们彼此之间是异步的。
由于线程执行的顺序具有不确定性,那么当AB两个线程执行带有分支判断的额方法时,就会出现逻辑错误.
当多线程同时执行Synchronized(x){}同步代码块时呈同步效果
当其他线程执行x对象中的Synchronized同步方法时呈同步效果
当其他线程执行x对象的Synchronized(this)代码块时也是同步效果
synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”,
类的两个不同实例就没有这种约束了。那么static synchronized恰好就是要控制类的所有实例的访问了,
static synchronized是限制线程同时访问jvm中该类的所有实例同时访问对应的代码块.
synchronzied的是实例方法与synchronzied的类方法由于锁定(lock)不同。
同步Synchronized(class)代码的作用和synchronized static方法的作用是一样的.
在一般情况下Synchronized不使用String作为锁对象,这是由于String的常量池所决定的,容易造成死锁的特点。而改用其他 比如new Object();
在双方互相等待对方释放锁就有可能出现死锁的现象.
只要锁对象不变,即使对象的属性改变了 运行的结果还是同步的。
哪句话有什么不明白的加我微信wangyan199366