synchronized重入测试

public class SynchronizeRetreenTest extends Thread {
  int i = 1;

  public synchronized void doSomething() {
    while (i < 10) {
    System.out.println("-------" + i);
    System.out.println(Thread.currentThread());
    i++;
    doSomething();
    }

  }

@Override
public void run() {
  doSomething();
}

public static void main(String[] args) {
  new SynchronizeRetreenTest().start();
}
}

如果synchronized为不可重入那么会进入死循环,用子父类其实不能验证是否可以重入因为根本不是同一把锁

时间: 2024-10-16 05:27:55

synchronized重入测试的相关文章

Synchronized重入锁

重入锁,指同一个线程试图获取一个已经由它自己持有的锁的一种"现象". 譬如有一个类: public class TestDemo{ public synchronized void doSomething1(){ doSomething2(); } public synchronized void doSomething2(){...} } 假设现在创建两个线程,ThreadA和ThreadB,同时调用TestDemo对象里面的方法, //定义线程A,ThreadApublic cla

并发编程(4):锁重入与锁异常

1.synchronized重入 关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到了一个对象的锁后,再次请求此对象时是可以再次得到该对象的锁. 1.1 同步方法间的调用 public class Demo5 { public synchronized void method1() throws InterruptedException { System.out.println("method..."); method2(); Thr

synchronized的功能拓展:重入锁(读书笔记)

重入锁可以完全代替synchronized关键字.在JDK5.0的早期版本中,重入锁的性能远远好于synchronized,但是从JDK6.0开始.JDK在synchronized上做了大量的优化.使得两者的性能差距不大, public class ReenterLock implements Runnable { public static ReentrantLock lock = new ReentrantLock(); public static int i = 0; /** * When

synchronized的可重入性

今天看并发编程实战,看到一个实例 public class Widget {      public synchronized void doSomething() {          ...      }  }    public class LoggingWidget extends Widget {      public synchronized void doSomething() {          System.out.println(toString() + ": calli

ReenTrantLock可重入锁(和synchronized的区别)总结

可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大.两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁. 锁的实现: Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的,有什么区别,说白了就类似于操作系统来控制实现和用户自己敲代码实现的区别.前者的实现是比较难见到的,后者有直接的源码可供阅读. 性能的区别: 在S

浅谈Java中的锁:Synchronized、重入锁、读写锁

Java开发必须要掌握的知识点就包括如何使用锁在多线程的环境下控制对资源的访问限制 ◆ Synchronized ◆ 首先我们来看一段简单的代码: 12345678910111213141516171819 public class NotSyncDemo { public static int i=0; static class ThreadDemo extends Thread { @Override public void run() { for (int j=0;j<10000;j++)

J.U.C重入锁

ReentrantLock重入锁 ReentrantLock是Java并发包中互斥锁,它有公平锁和非公平锁两种实现方式, 重入的意思就是,如果已经获得了锁,如果执行期间还需要获得这个锁的话,会直接获得所,不会被阻塞,获得锁的次数加1:每执行一次unlock,持有锁的次数减1,当为0时释放锁.这点,Synchronized 具有同样语义. Sync在ReentrantLock中有两种子类:非公平锁NonfairSync.公平锁FairSync,默认情况下为非公平锁. 先判断锁的状态,通过CAS来抢

两种方式实现自己的可重入锁

本篇文章将介绍两种自己动手实现可重入锁的方法. 我们都知道JDK中提供了一个类ReentrantLock,利用这个类我们可以实现一个可重入锁,这种锁相对于synchronized来说是一种轻量级锁. 重入锁的概念 重入锁实际上指的就是一个线程在没有释放锁的情况下,可以多次进入加锁的代码块. public void a() { lock2.lock(); System.out.println("a"); b(); lock2.unlock(); } public void b() { l

ReentrantLock(重入锁)功能详解和应用演示

1. ReentrantLock简介 jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock.虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景. 2. ReentrantLock和synchronized的相同点 2.1 ReentrantLock是独占锁且可重入的 例子 public class Reentr