工作生活

Java知识总结之线程安全与数据同步

2019-06-30  本文已影响0人  WangGavin

1 synchronized

synchronized关键字可以实现一个简单的策略来防止干扰和内存一致性错误,如果一个对象是对多个线程是可见的,那么对该对象的所有读或写都将通过同步的方式来进行.

1.1 synchronized用法

synchronized可以对代码块或方法进行修饰.

1.1.1 同步方法

同步方法例子

1.1.2 同步代码块

同步代码块的例子

1.2 monitor

1.2.1 monitorenter

每个对象都有一个monitor相关联,一个monitor的lock锁只能被一个线程在同一时间获取,在一个线程尝试获取与对象关联的monitor的所有权时会发生如下:

1.2.2 monitorexit

释放对monitor的拥有权,前提释放之前线程必须拥有该线程monitor的所有权.释放其实就是将monitor的计数器减1.如果计数器的结果为0,则该线程不再拥有对该monitor的拥有权,通俗来讲就是解锁.

1.3 使用synchronized的注意事项

1.4 this monitor和class monitor

2 程序死锁的原因及其诊断

程序进入死锁

2.1 程序死锁

上一篇 下一篇

猜你喜欢

热点阅读