java ReentrantLock 构造函数问题

Java ReentrantLock的构造函数有这一句代码

public ReentrantLock(boolean fair) {
    sync = fair ? new FairSync() : new NonfairSync();
}
    sync这个变量的类型是Sync,为什么可以被一个Boolean赋值?

2个回答

没有,这代码其实是
if (fair)
sync = new FairSync();
else
sync = new NonfairSync();

1、构造函数什么时候被调用,被谁调用?

转摘:http://bbs.csdn.net/topics/350231037
当然,只有在NEW的时候,才会真正的创建这个对象,只有在创建时才会调用该类的构造函数。
如:
Class A{
public A(){
System.out.println("这是A的构造函数");
}
}
C......
答案就在这里:java 构造函数问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java多线程---ReentrantLock源码分析
ReentrantLock源码分析 基础知识复习 synchronized和lock的区别 synchronized是非公平锁,无法保证线程按照申请锁的顺序获得锁,而Lock锁提供了可选参数,可以配置成公平锁,也可以配置成非公平锁。通常来说,非公平锁的效率比公平锁要高。 一个线程使用syn获取锁,除非该线程成功获取到锁,否则将一直阻塞住。而Lock锁提供了lockInterruptibly()接...
Java 重入锁 ReentrantLock 原理分析
2019独角兽企业重金招聘Python工程师标准>>> ...
【Java】ReentrantLock 实现原理
ReentrantLock 内部使用了AQS:https://blog.csdn.net/u010900754/article/details/88849938 但是因为有不同的锁模式,用了两种具体实现分别应对公平锁和非公平锁。 二者在实现获取锁的逻辑上有区别,也就是AQS留空的部分。下面看下lock和unlock实现。 非公平: static final class Nonfa...
Java并发编程系列:ReentrantLock
重入锁重入锁使用java.util.concurrent.locks.ReentrantLock类来实现。其性能优于synchronized。ReentrantLock增加了一些高级功能级功能 等待可中断:在synchronized中,如果一个线程在等待锁,他只用两种结果,要么获得锁执行完,要么一直保持等待。可中断得等待是通知正在等待的线程,告诉他没必要再等待后。 实现公平锁:公平锁:会按照时间的先
【JAVA】ReentrantLock使用方法
                                                   ReentrantLock学习 1、基本的使用,synchronized对象锁: 测试1: import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public cl...
【Java并发编程】ReentrantLock
概述 ReentrantLock是基于AQS构建的,AQS中有一个表示状态的字段state,ReentrantLock用它表示线程重入锁的次数,Semaphore用它表示剩余的许可数量,FutureTask用它表示任务的状态。对state变量值的更新都采用CAS操作保证更新操作的原子性。 类的结构 ReentrantLock类实现了Lock和java.io.Serializable接口,其...
Java并发编程之ReentrantLock学习
[size=large]Lock和synchronized区别[/size] 1、synchronized是java提供的内置关键字,一旦使用线程就被锁住,直到线程执行完成或者处于wait状态下才会释放;如果线程处于阻塞了就会其他线程就会一直等待,如sleep; 2、Lock是一个接口,在JDK1.5提供,属于JUC下面常用的同步处理接口。在执行同步是都需要通过方法获取锁,执行完成之后...
Java多线程——ReentrantLock源码阅读
上一章《AQS源码阅读》讲了AQS框架,这次讲讲它的应用类(注意不是子类实现,待会细讲)。 ReentrantLock,顾名思义重入锁,但什么是重入,这个锁到底是怎样的,我们来看看类的注解说明 ReentrantLock与隐式锁synchronized功能相同,但ReentrantLock更具有扩展性。 《锁优化》里提到Java在1.6对隐式...
Java并发:ReentrantLock源码分析
注:JDK1.7 对照源码效果更佳∠( ᐛ 」∠)_ 相关知识:队列同步器AbstractQueuedSynchronizer是用来构建锁或者其他同步组件的基础框架,它使用一个int变量(stats)来表示同步状态,并使用一个内置的FIFO队列来完成...
Java并发编程(五)-- ReentrantLock
锁是用来控制多个线程访问共享资源的方式,对共享资源加锁能够有效解决对资源的并发问题,比如在方法中或方法块中加synchronized关键字。在JDK5以后并发包中增加了Lock接口,用来实现锁功能。Lock提供了与Synchronized类似的同步功能,但是在使用时需要显示的获取和释放锁,故而Lock又称为“显示锁”,Synchronized则称“隐式锁”。Lock相对于Synchronized,...
【Java并发】- ReentrantLock,重入锁
ReentrantLock概述ReentrantLock(重入锁),顾名思义是可以重新进入的锁,也就是说当一个线程获取了这个锁之后还能在释放锁之前再次获取这个锁,同时还支持公平所和非公平锁的选择。ReentrantLock的重入重入例子synchronized就很好的支持了重入: 例: public class ReentrantLockDemo { public static void m
java多线程学习之ReentrantLock
package learn.thread;import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;/* ReentrantLock,比synchronized轻量灵活强大的锁 */ public class Demo13 extends Thread { @Override
java 构造函数的继承问题
专家读书笔记,希望能够对大家学习java有所帮助rnrn所有代码都经过测试,测试环境:rnjava version "1.4.0-rc"rnJava(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-rc-b91)rnJava HotSpot(TM) Client VM (build 1.4.0-rc-b91, mixed mode)rn如大家发现任何错误,或有任何意见请不吝赐教。rnrn缺省构造函数的问题:base类是父类,derived类是子类,首先要rn说明的是由于先有父类后有子类,所以生成子类之前要首先有父类。rnclass是由class的构造函数constructor产生的,每一个class都有rn构造函数,如果你在编写自己的class时没有编写任何构造函数,那么rn编译器为你自动产生一个缺省default构造函数。这个default构造函数rn实质是空的,其中不包含任何代码。但是一牵扯到继承,它的问题就出现rn了。rnrn如果父类base class只有缺省构造函数,也就是编译器自动为你产生的。rn而子类中也只有缺省构造函数,那么不会产生任何问题,因为当你试图产生rn一个子类的实例时,首先要执行子类的构造函数,但是由于子类继承父类,rn所以子类的缺省构造函数自动调用父类的缺省构造函数。先产生父类的实例,rn然后再产生子类的实例。如下:rnrnclass basernrnclass derived extends basernpublic static void main(String[] args)rnderived d=new derived();rnrnrnrn下面我自己显式地加上了缺省构造函数:rnclass basernbase()rnSystem.out.println("base constructor");rnrnrnclass derived extends basernderived()rnSystem.out.println("derived constructor");rnrnpublic static void main(String[] args)rnderived d=new derived();rnrnrnrn执行结果如下:说明了先产生base class然后是derived class。rnbase constructorrnderived constructorrnrn我要说明的问题出在如果base class有多个constructorrn而derived class也有多个constructor,这时子类中的构造函数缺省rn调用那个父类的构造函数呢?答案是调用父类的缺省构造函数。rn但是不是编译器自动为你生成的那个缺省构造函数而是你自己显式地rn写出来的缺省构造函数。rnrnclass basernbase()rnSystem.out.println("base constructor");rnrnbase(int i)rnSystem.out.println("base constructor int i");rnrnrnclass derived extends basernderived()rnSystem.out.println("derived constructor");rnrnderived(int i)rnSystem.out.println("derived constructor int i");rnrnpublic static void main(String[] args)rnderived d=new derived();rnderived t=new derived(9);rnrnrnrnD:\java\thinking\think6>java derivedrnbase constructorrnderived constructorrnbase constructorrnderived constructor int irnrn如果将base 类的构造函数注释掉,则出错。rnrnclass basern// base()rn// System.out.println("base constructor");rn// rnbase(int i)rnSystem.out.println("base constructor int i");rnrnrnclass derived extends basernderived()rnSystem.out.println("derived constructor");rnrnderived(int i)rnSystem.out.println("derived constructor int i");rnrnpublic static void main(String[] args)rnderived d=new derived();rnderived t=new derived(9);rnrnrnrnrnD:\java\thinking\think6>javac derived.javarnderived.java:10: cannot resolve symbolrnsymbol : constructor base ()rnlocation: class basernderived()rn^rnderived.java:13: cannot resolve symbolrnsymbol : constructor base ()rnlocation: class basernderived(int i)rn2 errorsrnrn说明子类中的构造函数找不到显式写出的父类中的缺省rn构造函数,所以出错。rnrn那么如果你不想子类的构造函数调用你显式写出的父类中的缺省rn构造函数怎么办呢?rn如下例:rnrnclass basern// base()rn// System.out.println("base constructor");rn// rnbase(int i)rnSystem.out.println("base constructor int i");rnrnrnclass derived extends basernderived()rnsuper(8);rnSystem.out.println("derived constructor");rnrnderived(int i)rnsuper(i);rnSystem.out.println("derived constructor int i");rnrnpublic static void main(String[] args)rnderived d=new derived();rnderived t=new derived(9);rnrnrnrnrnD:\java\thinking\think6>java derivedrnbase constructor int irnderived constructorrnbase constructor int irnderived constructor int irnrnsuper(i)表示父类的构造函数base(i)请大家注意rn一个是super(i)一个是super(8)。rn大家想想是为什么??rnrn结论:子类如果有多个构造函数的时候,父类要么没有构造函数,rn让编译器自动产生,那么在执行子类构造函数之前先执行编rn译器自动产生的父类的缺省构造函数;要么至少要有一个显rn式的缺省构造函数可以让子类的构造函数调用。rn rnrnhttp://www.cn-java.com/target/news.php?news_id=3548 rn
java 构造函数 this指针问题
若为类写了多个构建器,那么经常都需要在一个构建器里调用另一个构建器,以避免写重复的代码,可用 this  关键字做到这一点。 在构建器中,若为其赋予一个自变量列表,那么 this 关键字会具有不同的含 义:它会对与那个自变量列表相符的构建器进行明确的调用(局限在this调用次数、this位置)   Example: public class simple_tree { int heigh...
Java的构造函数问题
刚刚学习编写了一个有线程方面的例子 ,但是有个“构造函数位置放置错误”的提示,rn现在不知道怎么办 ,请指教啊!!!
java 构造函数问题
初学java 有很多问题rn问一下 rnGraphics g=a.getGraphics();rn他是类为什么Graphics g=new Graphics();就不行 ?rn看了jdk文档Graphics 继承object rn而getGraphics继承Component 不在一起也很怪异rn还有很多这样的有点蒙尤其是谁继承谁rn写的时候晕rnrnrnrnrn
关于Java构造函数的问题
[code=java]class Base rn // 定义了一个名为i的实例变量rn private int i = 2;rnrn public Base() rn this.display();rn rnrn public void display() rn System.out.println(i);rn rnrnrn// 继承Base的Derived子类rnclass Derived extends Base rn // 定义了一个名为i的实例变量rn private int i = 22;rnrn // 构造器,将实例变量i初始化为222rn public Derived() rn i = 222;rn rnrn public void display() rn System.out.println(i);rn rnrnrnpublic class Test rn public static void main(String[] args) rn // 创建Derived的构造器创建实例rn new Derived();rn rn[/code]rnrn运行结果是:0rn求大牛解释一下原理。
java 构造函数的问题
[code=java]public class MainForm extends JFrame implements ActionListenerrnrn JMenuBar mBar=new JMenuBar();rn MainForm()rn rn setVisible(true); // 主要是问这里rn rn rn rn public static void main(String[] args) rn new MainForm();rn rn[/code]rnrnrn之后再另外一个类里如此调用rnrnnew MainForm().setVisible(true);rnrn我是java小白,请问可以这样调用一个构造器里的函数吗,这是根据哪条原则,非常感谢!
java构造函数问题
import java.util.*;rnrnclass Rock2 rn Rock2(int i) rn System.out.println("Creating Rock Number " + i);rn rnrnrnpublic class SimpleConstructor2 rn public static void main(String[] args) rn for (int i = 0; i < 10; i++) rn new Rock2(i); rn rnrnrn为什么以这种方式调用Rock2的构造函数。rn而我的写法是 Rock2 a = new Rock2(i)rn时却抱错了。把for循环用打括号括起来,编译通过。执行正常。rn请问:这是为什么?
JAVA 静态变量与构造函数问题
public class ValueTwo rnstatic int b=0;rnpublic ValueTwo(int v)rn b=v;rnrnpublic void cumulate()rnrn b++;rnrnrn-----------------------rnrnrnpublic class TestValueTwo rnprivate void prin(int a)rn System.out.println(a);rnrnValueTwo vt=new ValueTwo(10);rnrnpublic static void main(String args[])rn ValueTwo vt1=new ValueTwo(1);rn TestValueTwo tt=new TestValueTwo();rn tt.prin(vt1.b); rn vt1.cumulate();rn tt.prin(vt1.b); rn rnrnrn问题是:不是打印出为什么打印出来是10,11而不是1,2呢?rn明明根据ValueTwo vt1=new ValueTwo(1); 后b=1的。
Java构造函数调用顺序问题
java构造代码调用顺序研究。
java构造函数问题··
package test;rnclass Pointrn public int x ,y;rn public Point(int x,int y)rn rn this.x = x;this.y = y;rn rn public int GetX()rn return this.x;rn rn public int GetY()rn return y;rn rnrnclass Linern public Point p1,p2;rn Line();rn Line(Point a,Point b)rn rn p1 = new Point(a.GetX(),a.GetY());rn p2 = new Point(b.GetX(),b.GetY());rn rn public double Length()rn return Math.sqrt(Math.pow(p2.GetX()-p1.GetX(), 2) + Math.pow(p2.GetY()-p1.GetY(),2));rn rnrnpublic class aLine rn public static void main(String[] args)rn rn Line l = new Line();rn l.p1.x=2;l.p1.y=3;l.p2.x=4;l.p2.y=5;rn System.out.println(l.Length());rn rnrn总是报错Exception in thread "main" java.lang.NullPointerExceptionrn at test.aLine.main(aLine.java:31)rn是不是Line构造函数的问题?Line如何写构造函数
java的构造函数的问题!!
import java.applet.*;rnimport java.awt.*;rnpublic class MainPaint extends Applet rn public void paint(Graphics g)rn rn rn Shape s=new Shape(12,45,78,65,g);rn s.draw();rn rnrnrnrnrnpublic class Shape rnrn private int x1;rn private int x2;rn private int y1;rn private int y2;rn Color co;rn Graphics g;rn Shape(int i1,int i2,int i3,int i4,Graphics g)rn rn x1=i1;x2=i2;y1=i3;y2=i4;rn this.g=g;rn rn}rn为什么一直提示没有符合类型的构造函数
Java 构造函数 super问题
父类,子类均没有提供构造函数 => 编译器会分别为父类,子类生成一个默认的无参数的构造函数 父类没有提供构造函数,子类提供无参数构造函数 => 子类构造函数无需super() class Father {} class Child extends Father { Child() { System.out.println("这是子类的无参数构造函数"); } } pu
java 线程同步中的对象锁 ReentrantLock
关于java线程的同步 //锁对象 public class Bank { private Lock bankLock =new ReentrantLock();//创建一个锁对象 public void transfer(int from , int to , int amount)
简单聊聊Java中的ReentrantLock
【福利】关注微信公众号:深夜程猿,回复关键字即可获取学习视频、简历模版 欢迎读者批评指正~~ 背景知识 在Java中,要想做到线程同步的传统方式是使用关键字synchronized。synchronized关键字提供了一个基本的同步机制,但是它的使用是十分严格的。例如,一个线程只能获取一次锁。同步的阻塞没有提供任何阻塞队列机制,当一个线程退出的时候,任何的线程都可以获取锁。这样会导致某些线程在一...
java 高并发 ReentrantLock -- 可重入的锁
ReentrantLock -- 可重入的锁 可重入锁指在同一个线程中,可以重入的锁。当然,当这个线程获得锁后,其他线程将等待这个锁被释放后,才可以获得这个锁。 构造器:ReentrantLock(boolean fair): 布尔值用来表示,创建的这个锁是公平的锁,还是自由竞争的锁。所谓公平的锁,是指,各个希望获得所得线程获得锁的顺序是按到达的顺序获得,还是自由竞争获得。 通常的使用方法:...
java并发编程总结二ReentrantLock
1. 使用ReentrantLock来替代synchronized 需要注意的是,使用reentrantLock必须手工释放锁 使用synchronized锁如果出现异常的话,jvm会自动释放锁,但是lock必须手工释放,可以在finally代码块中释放 public class ReentrantLock2 { Lock lock = new ReentrantLock(); voi...
java独占锁ReenTrantLock的实现
ReenTrantLock的实现,源代码分析。
Java并发编程 | 第二篇:ReentrantLock重入锁
首先重入锁用ReentrantLock来实现的,关于重入锁ReentrantLock的几个重要方法: 1、lock():获得锁,如果锁被占用,只能等待 2、lockInterruptibly():获得锁,可以响应中断 3、tryLock():尝试获得锁,如果成功返回true,失败返回false,该方法不等待,立即返回 4、tryLock(long time,TimeUnit unit):设...
ReentrantLock的一个问题
今天在回顾java并发编程时遇到一个问题,有点奇怪 代码如下class BlockMutex { private Lock lock = new ReentrantLock(); public BlockMutex() { lock.lock(); } public void f(String name) { lock.lock();
java之ReentrantLock公平锁和非公平锁
大多数情况下,大家可能都会选择使用synchronized来加锁,ReentrantLock确实是一种高级加锁工具,在确实需要一些 synchronized 所没有的特性的时候,比如时间锁等候、可中断锁等候、无块结构锁、多个条件变量或者锁投票。 以下实现公平锁和非公平锁,公平锁在性能上会多消耗点 package com.cmcc.web.test.lock; import java.util
java并发系列:深入分析ReentrantLock
本文属于java并发梳理系列。 引子 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。本文梳理下ReentrantLock。作为依赖于AbstractQueuedSynchronizer。 所以要理解ReentrantLock,先要理解AQS。关系图如下所示: aqs有多神奇,让Reentra
java并发编程(五)----(JUC)ReentrantLock
上一节我们了解了Lock接口的一些简单的说明,知道Lock锁的常用形式,那么这节我们正式开始进入JUC锁(java.util.concurrent包下的锁,简称JUC锁)。下面我们来看一下Lock最常用的实现类ReentrantLock。1.ReentrantLock简介由单词意思我们可以知道这是可重入的意思。那么可重入对于锁而言到底意味着什么呢?简单来说,它有一个与锁相关的获取计数器,如果拥有锁的
JAVA多线程之——互斥锁ReentrantLock
ReentrantLock简介 首先回顾一下synchronized关键字。 把代码声明为synchronized之后,那么就会保证,每次都只有一个线程获取对象的内部锁,进而产生互斥保证共享资源的安全。synchronized是获取对象的内部锁,所以是原生语法层面的互斥,需要JVM实现。 ReentrantLock是jdk1.5开始引入的JUC并发包中的一个类,ReentrantLock基于j
Java高并发编程之ReentrantLock
ReentrantLock和synchronized一样,都是可重入的,但是它与synchronized是有区别的,在了解两者的区别之前,先尝试着,使用ReentrantLock替换synchronized。 先看下面synchronized的代码: public class T016 { synchronized void m1() { for(int i = 0; i...
Java多线程之《自旋锁》ReentrantLock
重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。 package concurrent; import org.junit.Test; import java.util.concurrent.locks.ReentrantLock; /** * Desc: * Creator:...
Java并发编程——ReentrantLock重入锁解析
重入锁 所谓重入锁,即支持重入性,表示能够对共享资源重复加锁,即当前线程获取该锁再次获取不会被阻塞。 重入性 在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功; 由于锁会被获取n次,那么只有锁在被释放同样的n次之后,该锁才算是完全释放成功。 ReentrantLock分为公平锁与非公平锁,默认选择的是非公平锁(无参构造函数),另一种构造方式,可传入一个boolean值。tr...
Java悲观锁与重入锁ReentrantLock的区别
java锁一共分为3种锁 乐观锁、悲观锁、自旋锁 今天主要讲下悲观锁,即认为写多,遇到并发写的可能性高,每次去拿数据的时候都认为别人 会修改,所以每次在读写数据的时候都会上锁。悲观锁有一个关键字是Synchronized,AQS框架下的锁则是先尝试cas乐观锁去获取锁,获取不到,才会转换为悲观锁。 Synchronized作用范围 1、作用于方法时,锁住的是对象实例(this) 2、作用...
Java并发编程之ReentrantLock源码解析
JDK1.5之前只能利用synchronized实现线程同步,JDK1.5之后开始借助JNI来完成更高级的锁。 JDK 5中的锁是接口java.util.concurrent.locks.Lock,并提供了相应的实现类java.util.concurrent.locks.ReentrantLock 1  举栗子 import java.util.concurrent.locks.Lock
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池