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

《java多线程编程核心技术》核心笔记(一)

2016-07-04 11:21 387 查看


线程具有优先级 

线程的优先级具有继承特性。被调用者继承调用者的优先级
 
优先级高的线程 绝大部分会现执行

方法内的变量是线程安全的。

多个线程访问同一个对象的同步方法时,一定是线程安全的。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 多线程