首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ReentrantLock的NonfairSync加锁流程

NonfairSync 重入锁的非公平锁,尝试获取锁的线程有可能会成功,如果不成功的话,则会进入AQS的队列。...NonfairSync加锁流程 ReentrantLock.lock函数,会调用到NonfairSync.lock方法,首先会通过CAS方法,尝试将当前的AQS的State字段改成从0改成1,如果修改成功的话...如果当前线程没有获取到锁的话,那么就会返回false,表示获取锁失败 而在addWaiter方法则会新建一个Node,然后将节点添加到队列,让这个节点成为 tail。...如果当前的尾节点没有变化过,并且将node成功设置成尾节点的话,那么则将之前尾节点的next设置成当前的node,并且返回尾节点node 否则调用enq(node)将当前节点添加到队列尾部,并且返回node,而在enq方法...当前线程会等待它在“CLH队列”前面的所有线程执行并释放锁之后,才能获取锁并返回。

69740
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Javafinalize方法

    前沿:在面试过程我们可能会被问到final、finally、finalize的区别?本篇文章将介绍finalize的简单用法。 Finalize()是Object类的方法。...在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。 finalize()方法将重写以处理系统资源,执行清理活动并最大程度地减少内存泄漏。...public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } //子类重写此方法...垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一 个新的引用变量重新引用该对象,则会重新激活对象)。...永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    1.1K40

    java invoke 方法说明_java的反射,invoke方法

    以下代码简单地介绍了java反射中invoke方法 package org.curry.tool; import java.lang.reflect.Method; public class InvokeMethods...try { // getMethod方法第一个参数指定一个需要调用的方法名称,这里是Employee类的setAge方法, // 第二个参数是需要调用方法的参数类型列表,是参数类型!...如无参数可以指定null或者省略 // 该方法返回一个方法对象 //参数必须和方法中一样,int和Integer,double和Double被视为不同的类型 Method sAge = cl.getMethod...cl.getMethod(“printName”, new Class[] { String.class }); Object[] args1 = { new Integer(25) }; // invoke方法...,第二个参数为参数列表,该参数列表是一个object[]数组 // emp为隐式参数该方法不是静态方法必须指定 sAge.invoke(emp, args1);//通过setter方法赋值 Integer

    1.5K40

    Javamain方法详解

    Java的main方法,是一个java应用程序的入口,无论一个java的应用多么复杂庞大,或是多么的小,只要他是一个可以运行的java程序那么必然就要有一个main方法。...在Java声明为public的任何方法或变量都可以从该类的外部访问。 而JVM访问main方法显然不是在类的内部访问,因此main方法需要定义为public的方法。...如果main方法正常退出,那么Java应用层序的退出代码为0,表示成功的运行了程序。...5、String [] args String[] args,是main方法唯一可以改变的地方!...,才会开始调用finalize()方法;因此并不是所有对象的finalize()方法都会被执行; 2)该线程也是daemon线程,因此如果虚拟机没有其他非daemon线程,不管该线程有没有执行完finalize

    1.7K20

    详解Java静态方法

    参考链接: Java的静态类 定义: 在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存才有这个方法的代码段。...原因: 因为静态方法和静态数据成员会随着类的定义而被分配和装载入内存,而非静态方法和非静态数据成员只有在类的对象创建时在对象的内存才有这个方法的代码段。 ...对以上描述进行验证的代码示例:  import java.util.*; public class TestStatic {     public static void main(String[]args...            return t;         }     } } 总结: (1)static修饰的静态方法会随着类的定义而被分配和装载入内存,编译器只为整个类创建了一个静态变量的副本,...(2)静态不能引用非静态这一特性,是由于静态的会随着类的定义而被分配和装载入内存这一关键点决定的;如果静态引用了非静态的,根本无法从内存中找到非静态的代码段,势必会出错,这种做法是Java虚拟机决不允许的

    85620

    Java的构造方法

    ,没有返回类型,甚至连void也没有 3,主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的 4,类必定有构造方法,若不写,系统自动添加无参构造方法...当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应 完成构造函数的调用] 7,构造方法可以被重载...如果不写构造方法java系统会默认添加一个无参的构造方法。...在Subtine的主方法只调用子类构造方法,实例化子类对象并且在子类构造方法,没有调用父类的构造方法的任何语句。...但是在实例化对象时,它相应的调用了父类构造方法,在结果还可以看到调用构造方法的顺序,首先是顶级,再继续往下直达本身类。

    74530

    java的Native方法

    一个Native Method是这样一个java方法:该方法的实现由非java语言实现,比如C。...这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++,你可以用extern "C"告知C++编译器去调用一个C的函数。...一个native method方法可以返回任何java类型,包括非基本类型,而且同样可以进行异常控制。这些方法的实现体可以制一个异常并且将其抛出,这一点与java方法非常相似。...有一点要牢牢记住:我们可以在一个native method的本地实现访问所有的java特性,但是这要依赖于你所访问的java特性的实现,而且这样做远远不如在java语言中使用那些特性方便和容易。...本地方法非常有用,因为它有效地扩充了jvm.事实上,我们所写的java代码已经用到了本地方法,在sun的java的并发(多线程)的机制实现,许多与操作系统的接触点都用到了本地方法,这使得java程序能够超越

    4.7K10

    javastringBuilder常用方法

    每次使用 System.String类方法之一时,都要在内存创建一个新的字符串对象,这就需要为该新对象分配新的空间。...; (一)设置容量和长度   虽然 StringBuilder对象是动态对象,允许扩充它所封装的字符串字符的数量,但是您可以为它可容纳的最大字符数指定一个值。...(2)AppendFormat   AppendFormat方法将文本添加到 StringBuilder的结尾处,而且实现了 IFormattable接口,因此可接受格式化部分描述的标准格式字符串。...(3)Insert   Insert方法将字符串或对象添加到当前 StringBuilder的指定位置。以下示例使用此方法将一个单词插入到 StringBuilder的第六个位置。...(4)delete   可以使用 delete方法从当前 StringBuilder移除指定数量的字符,移除过程从指定的从零开始的索引处开始。

    71110
    领券