
JAVA
文章平均质量分 78
fk543
fk5431.com
展开
-
ReentrantLock阅读
ReentrantLockReentrantLock是一个互斥锁,也是一个可重入锁。ReentrantLock锁在同一时刻只能被一个线程持有,但是它可被单个线程多次获取,每获取一次AQS的state就加1。ReentrantLock内部的实现(公平锁和非公平锁)都是基于内部Sync的实现。内部结构ReentrantLock内部定义了三个重要的内部类,Sync、FairSync、Nonfai...原创 2019-12-14 23:15:50 · 243 阅读 · 0 评论 -
ConcurrentHashMap(1.7|1.8)阅读
ConcurrentHashMapjdk1.7ConcurrentHashMap 和 HashMap非常类似,ConcurrentHashMap在实现上采取了分段锁的思想来实现的。ConcurrentHashMap在内部采用了一个叫做 Segment 的结构,一个Segment就类似HashMap中的table,这样在定位一个元素的时候,需要进行两次hash操作,一次定位到Segment,第...原创 2019-12-13 10:43:47 · 243 阅读 · 0 评论 -
aqs源码
博客地址aqsAQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。AQS虽然被定义为抽象类,但事实上它并不包含任何抽象方法。AQS是被设计为支持多种用途,如果定义抽象方法,子类在继承的时候就需要实现所有抽象方法,所以AQS将需要子类覆盖的方法都...原创 2019-11-27 22:04:34 · 320 阅读 · 0 评论 -
synchronized和lock
锁的种类锁的种类很多,包括:自旋锁(CAS)、阻塞锁、可重入锁、读写锁、互斥锁、悲观锁、乐观锁、公平锁、可中断锁等等,主要介绍下可重入锁、读写锁、可中断锁和公平锁。可重入锁如果锁具备可重入性,则称作为可重入锁。synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举比如说,当一个线程执行到met...原创 2019-11-24 21:47:19 · 240 阅读 · 0 评论 -
线程池阅读
http://fk5431.com/20191115/javasource/util/2_ExecutorService/类继承的结构Executor是最顶层的接口,定义了execute(Runnable runnable)方法。ExecutorService继承了Executor,继承了execute方法,还定义很多接口方法,例如shutdown、isTerminated、submit等方法...原创 2019-11-19 19:50:10 · 146 阅读 · 0 评论 -
HashMap阅读 (1.8|1.7)
HashMap阅读 (1.8|1.7)HashMap源码阅读 HashMap 内部默认的参数变量值含义DEFAULT_INITIAL_CAPACITY16默认容量MAXIMUM_CAPACITY1 << 30最大容量DEFAULT_LOAD_FACTOR0.75负载因子TREEIFY_THRESHOLD8链表超过8转为红黑...原创 2019-11-17 17:13:48 · 153 阅读 · 0 评论 -
java输入流输出流
java把不同来源和目标的数据称为抽象为数据流。在java中输入输出的功能很强大,提供了很庞大的类库,涉及到的领域很广:包括标准的输入输出、文件的操作、网络上的数据流、字符串流、对象流、zip文件流等。因为有如此多的类库,所以java的输入输出流的代码并不整洁。java流的分类 按流向分类: 输入流和输出流 按数据传输单位分类: 字节流和字符流 按功能分类: 节点流:用于直接操作原创 2016-10-25 17:17:54 · 802 阅读 · 0 评论 -
android:intent flags
一、Activity和Task(栈)的关系 Task就像一个容器,而Activity就相当与填充这个容器的东西,第一个东西(Activity)则会处于最下面,最后添加的东西(Activity)则会在最低端。从Task中取出东西(Activity)则是从最顶端取出,也就是说最先取出的是最后添加的东西(Activity),一次类推,最后取出的是第一次添加的Activity,而Activity在T原创 2015-10-19 16:33:11 · 716 阅读 · 0 评论 -
JavaNio——Channel
Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示: Channel的实现FileChannelDatagramChannelSocketChannel原创 2017-01-11 10:21:01 · 570 阅读 · 0 评论 -
JavaNio——FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileC原创 2017-01-11 13:59:29 · 507 阅读 · 0 评论 -
深入理解volatile
java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。VolatileVolatile变量具有synchronized的可见性特性,但是不具备原子性。线程可以自动发现volatil原创 2017-05-02 13:59:28 · 1013 阅读 · 0 评论 -
深入分析ConcurrentHashMap
HashMap的问题HashMap是不支持并发操作的,多线程情况下HashMap可能会导致死循环的发生,导致CPU占用率达到100%。Hash表的数据结构HashMap通常会用一个指针数组(假设为table[])来做分散所有的key,当一个key被加入时,会通过Hash算法通过key算出这个数组的下标i,然后就把这个HashMap的源码public V put(K key, V value) {原创 2017-05-03 17:01:00 · 591 阅读 · 0 评论 -
JVM 堆内存设置原理
堆内存设置原理JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation转载 2016-08-13 21:05:32 · 721 阅读 · 0 评论 -
java中将有符号类型转换为无符号类型
public static int getUnsignedByte (byte data){ //将data字节型数据转换为0~255 (0xFF 即BYTE)。return data&0x0FF;}public static int getUnsignedShort(short data){return data&0xFFFF;}public static lo原创 2016-08-01 20:48:53 · 9195 阅读 · 1 评论 -
beanutils的一个小问题
今天在使用beanutils的时候,需要将一个日期存到beanutils中,然后在通过一个service访问存到数据库中,因为要讲输入的字符串先转换为日期格式,因此ConvertUtils.register( new DateLocaleConverter(Locale.getDefault(), "yyyy-mm-dd") , java.util.Date.class);用到原创 2016-02-23 00:31:22 · 769 阅读 · 0 评论 -
eclipse的自动提示
由于重新配置了环境,并且eclipse也是装的4.2的,今天用的时候发现了,居然没有自动提示功能,也就是当一个对象居然点不出他的相关方法。后来网上搜索了下,成功的 办法是。1、我window->Preferences->Java->Editor->content assist 把 Enable auto activation 选项打上勾 :(如下图)并且在点后面加上.abcdefg原创 2015-08-24 20:23:43 · 939 阅读 · 0 评论 -
java学习之包装类
java为基本数据类型提供了对用的类,这些类就叫做包装类,包装类中封装了一些很实用的方法和常量,在我们平常开发的时候是十分方便的。不同的基本数据类型有不同的包装类的类型,就像下图一样一些包装类的使用例子如下(int):package com.jikexueyuan.ch;import java.util.Scanner;import javax.swing.plaf.syn原创 2015-08-26 13:06:59 · 843 阅读 · 0 评论 -
java学习之继承、重载、重写(覆盖)
ava中使用extends关键字完成继承,和C++中的继承不同之处在于java只支持单继承,不支持多重继承。继承让我们的代码编码变得简单,维护也变得简单,扩展变得容易。我们在继承的时候不能继承构造方法,一个类得到构造方法只有两种方法,一种是自己定义构造方法,一种是使用JVM分配的缺省构造方法。原创 2015-08-28 11:21:43 · 881 阅读 · 0 评论 -
java中的Random类
Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机转载 2015-09-13 20:05:57 · 1301 阅读 · 0 评论 -
JAVA中的StringBuffer
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。 在原创 2015-10-24 12:44:48 · 758 阅读 · 0 评论 -
Java学习之String类
Java中的String类也是对字符串事物的描述,字符串的简单用法如下:package com.jikexueyuan.ch;import java.util.Scanner;public class Test02 { public static void main(String[] args){ String s1 = "abc"; //字符串一旦被初始化就不可更改 St原创 2015-08-26 15:40:49 · 807 阅读 · 0 评论 -
java Date GregorianCalendar
package com.fengkai.www;import java.text.DateFormatSymbols;import java.time.DayOfWeek;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Locale;import javax.print.原创 2015-10-11 19:46:09 · 727 阅读 · 0 评论 -
关于JAVA方法参数传递方式
java程序语言中总是按值调用。也就是,方法得到的是所有参数值的一个拷贝,而且方法不能修改传递给他的任何参数变量内容。对于基本数据类型来说,直接拷贝了一份参数进行操作,所以不会对传进去的参数有什么影响。对于对象的引用来说,拷贝的是对象的引用,如果在函数中对它的引用进行了操作的话,会改变原来对象的值。下面有个例子可能证明,对象传进去进行的是对象引用的拷贝,而不是进行了引用调用原创 2015-10-12 16:37:24 · 1069 阅读 · 0 评论 -
Java 类的初始化顺序
一、 没有继承情况下:package I;import java.awt.image.SampleModel;import java.lang.Thread.State;class Example{ static { System.out.println("Example 的静态块"); } { System.out.println("Example 块"); }原创 2015-11-22 14:29:24 · 848 阅读 · 0 评论 -
Java中的Object类
Object 类是Java中所有类的始祖。原创 2015-11-22 21:35:34 · 1223 阅读 · 0 评论 -
Junit
Junit是一个java语言的单元测试框架Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。Junit中的部分注解A、@Before 注解:与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行;B、@A原创 2016-01-20 11:57:35 · 788 阅读 · 0 评论 -
java的简介
java是简单、完全面向对象、分布式、解释性、安全与系统无关、可一直、高性能、多线程和动态的编程语言。java 可跨平台编程,java平台(JavaEE,JavaME,JavaSEx)。javaSE java平台标准版javaEE java平台企业版 构建大型企业网站javaME java平台微型版 用于手机平台开发java运行需要运行在Java虚拟机当中。Java虚原创 2015-07-16 15:41:31 · 1210 阅读 · 0 评论