java 并发编程之synchronized。

来源:互联网 发布:mac如何复制粘贴文件 编辑:程序博客网 时间:2024/05/16 05:10

线程本身是属于操作系统的概念,任何语言都之后通过某种方式来调这种资源来执行某种任务。多线程的核心在于线程间的通信以及线程之间的独立性。java 采用临界区的概念来保证线程的安全性。通过synchronized在对象或者方法上加锁来创建临界区。

在多个线程访问的某个加了synchronized关键字的方法或者对象时,会尝试去获得锁。如果拿到了锁,就会执行关键字修饰的方法。如果没有拿到锁,则会不断的轮询尝试获得锁。所以使用synchronized可能会发生锁竞争的问题。

synchronized的获取的是对象锁。 如果给类加锁,则获取的是类的锁。等于整个类都会加锁。这以为着 当前类new 出来的实例,无论都多少个都是独占的。

对象锁的同步和异步:
同步意味着共享,只有共享的资源才需要同步,例如连接池。全局的对象。如果不是共享资源,就不需要加同步关键字。
异步的概念就是独立,相互之间不会受到影响。
同步的目的是为了线程安全,满足线程安全需要两个特性:
1、原子性 2、可见性 只有满足以上两点,才能称之为线程安全。

synchronized锁的重入性:
当一个线程得到一个对象的锁时,再次请求此对象可以再次得到改对象的锁。