
java基础
qxhly
但行善事,莫问前程
展开
-
InheritableThreadLocal和TransmittableThreadLocal详解
InheritableThreadLocal简介由于ThreadLocal设计之初就是为了绑定当前线程,如果希望当前线程的ThreadLocal能够被子线程使用,实现方式就会相当困难(需要用户自己在代码中传递)。在此背景下,InheritableThreadLocal应运而生。应用调用链追踪:在调用链系统设计中,为了优化系统运行速度,会使用多线程编程,为了保证调用链ID能够自然的在多线程间传递,需要考虑ThreadLocal传递问题(大多数系统会使用线程池技术,这已经不仅仅是InheritableT转载 2021-08-24 13:45:34 · 2105 阅读 · 0 评论 -
JSON&&FASTJSON
JSON简介从百科上面拿了一段话:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效...原创 2019-04-25 14:47:30 · 251 阅读 · 0 评论 -
Java基础- Semaphore,CountDownLatch,CyclicBarrier
Semaphore(信号量)synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个资源,Semaphore(信号量)可以指定多个线程同时访问某个资源。public class SemaphoreExample1 { // 请求的数量 private static final int threadCount = 550; public static void main(String[] args) throws InterruptedException {原创 2021-08-10 22:57:25 · 246 阅读 · 0 评论 -
Java基础- ReentrantLock
ReentrantLock概述ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于 synchronized 的使用,但是 ReentrantLock 提供了比 synchronized 更强大、灵活的锁机制,可以减少死锁发生的概率源码:public class ReentrantLock implements Lock, java.io.Serializable { private final Sync sync; abstract static class原创 2021-08-10 22:04:54 · 389 阅读 · 0 评论 -
Java基础- AQS
概述AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。AQS 就是一个抽象类,主要用来构建锁和同步器。AQS 为构建锁和同步器提供了一些通用功能的实现,因此,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,Fut原创 2021-08-10 22:00:30 · 86 阅读 · 0 评论 -
Java基础-Synchronized关键字
概述Synchronized是Java中保证线程安全的使用较多的一个关键字使用场景修饰实例方法,对当前实例对象this加锁public class Synchronized { public synchronized void aaa(){ }}修饰静态方法,对当前类的Class对象加锁public class Synchronized { public synchronized static aaa(){ }}修饰代码块,指定一个加锁的对象,给对象原创 2021-08-10 00:10:35 · 179 阅读 · 1 评论 -
Java基础- Java内存模型(JMM)
概念Java内存模型,是java虚拟机规范中所定义的一种内存模型,Java内存模型是标准化的,屏蔽掉了底层不同计算机的区别现代计算机的内存模型现代计算机中,cpu的指令速度远超内存的存取速度, 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。基原创 2021-08-09 22:29:01 · 95 阅读 · 0 评论 -
Java基础- volatile关键字
概念volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且其用法和语义也都是不尽相同的。尤其在C语言、C++以及Java中,都有volatile关键字。都可以用来声明变量或者对象。volatile是并发编程中常用的关键字,可以保证修饰的变量对所有线程的可见性和程序执行的顺序即有序性volatile的用法volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。volatile的用法比较简单,只需要在声明一个可能被多线程同时访问的变量时,使用volatile原创 2021-08-08 21:32:24 · 119 阅读 · 0 评论 -
Java基础-Java线程池
概念线程池,其实就是维护了很多线程的池子,类似这样的池化技术还有很多的,例如:HttpClient 连接池、数据库连接池、内存池等等。线程池的优点在 Java 并发编程框架中的线程池是运用场景最多的技术,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来至少以下4个好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗;提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行提高线程的可管理性。线程是稀缺资源,如果无限制地创原创 2021-08-08 15:13:27 · 121 阅读 · 0 评论 -
Java基础- ThreadLocal
使用场景ThreadLocal用在多线程场景下,保存线程上下文信息,再任意需要的地方可以获取线程安全的,避免某些情况下需要考虑线程安全同步带来的性能损失它能让线程拥有了自己内部独享的变量每一个线程可以通过get、set方法去进行操作可以覆盖initialValue方法指定线程独享的值通常会用来修饰类里private static final的属性,为线程设置一些状态信息,例如user...转载 2020-04-05 11:23:54 · 234 阅读 · 0 评论 -
单例模式
懒汉式public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { in...原创 2020-03-08 19:56:44 · 107 阅读 · 0 评论 -
hashmap链表循环问题
jdk 1.7 hashmap1.7中是数据是先扩容后插入链表循环问题发生在链表转移的方法中void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; for (Entry<K,V> e : table) { while(null != e...转载 2020-03-08 19:55:40 · 1790 阅读 · 2 评论 -
HashMap&ConCurrentHashMap
jdk 1.7 HashMap 大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。 上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表 的 next。 capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。 loadFactor:负载因子,...转载 2020-03-08 19:48:59 · 135 阅读 · 0 评论 -
Java基础- 线程
线程和进程进程:是系统进行资源分配和调度的基本单位,一个运行中的程序就是一个进程,它是一个动态的概念。线程:是进程执行的最小单元,一个进程最少有一个线程,线程的上下文切换比进程快得多。线程可分为用户线程和守护线程(摘自https://www.liaoxuefeng.com/wiki/1252599548343744/1306580788183074>)用户线程:平时我...原创 2020-03-04 18:27:40 · 99 阅读 · 0 评论 -
多线程与高并发
为什么使用多线程多线程也就是多个线程在运行,可以提高cpu的使用率,单线程执行程序时,阻塞时一直等着,多线程执行程序时,一个线程阻塞,其他线程继续执行。并发与并行并发就是在一个时间段内,多个线程交替获取时间片运行,由于交替的间隔比较短,所以可以认为是同时执行。并行是真正意义上的同时执行,比如多个cup同一时间运行多个线程,不存在抢占时间片的情况。一般线程数都是多于机器的cup数,所...翻译 2020-03-04 18:26:09 · 422 阅读 · 0 评论 -
代理模式
代理模式代理的意义在原功能上增加新的功能,为了保证代码的稳定和安全不能直接对原代码进行更改,那怎么办呢?这个时候代理就出现了,代理就是对原功能的代理,并且增强其功能,通过代理对象访问目标对象。比如一辆车会跑,这个时候还需要记录跑的里程,为了不影响跑的功能,只需给车新增一个代理,就可以实现不影响原功能的基础上记录里程。代理模式的实现方式静态代理静态代理是开始就确定了要代理的对象,编...原创 2020-02-19 10:49:08 · 107 阅读 · 0 评论 -
反射机制
反射机制反射作用在程序运行时,需要动态加载一些类,这些类可能在之前用不到所以没有加载到jvm内存,在运行时根据需要加载,比如通过jdbc加载数据库驱动,Class.forName(“com.mysql.jdbc.Driver”);数据库驱动并没有提前加载到jvm,而是在运行时根据需要去加载。反射一般框架和开发工具用的比较多,比如框架里的注解,idea工具提示功能jvm如何构建一个实例...原创 2020-02-19 10:13:12 · 90 阅读 · 0 评论 -
package &import
包的一般格式,package com.xxx;-package语句作为java源文件的第一条语句,指明该文件中定义的类所在的包-不需要import直接使用的是java.lang包中的类-class文件的最上层包的父目录位于classpath下-打包命令:jar -cvf xx.jar*.*原创 2017-09-11 10:10:46 · 178 阅读 · 0 评论 -
java-Swing-paintComponent
class MyPanel extends JPanel{ public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.red); g.fillRect(10,10,80,30); }}不调用super.pa原创 2017-11-25 20:34:02 · 576 阅读 · 0 评论 -
java-4个访问控制权限
子类继承父类的私有属性时,没有访问权,不能调用class的权限修饰符只可以用public和default;原创 2017-09-11 11:28:44 · 1183 阅读 · 0 评论 -
java-jdbc工具类(QueryRunner)
为了快捷开发,避免代码重复量,使用JDBC工具类 需要两个jar包,一个文件package com.west.jdbcutil;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.util原创 2017-11-05 15:46:22 · 1159 阅读 · 0 评论 -
java-jdbc
链接数据库步骤:package com.west.demo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/* * JDBC操作数据库的步骤 * 1.注册驱动 * 告知JVM使用的是原创 2017-11-04 16:25:01 · 143 阅读 · 0 评论 -
java-资源类以及等待和唤醒
多线程之间需要协调工作:如果条件不满足,则等待;当条件满足时,等待该条件的线程将被唤醒。在Java中,这个机制的实现依赖于wait/notify。等待机制与锁机制是密切关联的wait(): 等待对象的同步锁,需要获得该对象的同步锁才可以调用这个方法,否则编译可以通过,但运行时会收到一个异常:IllegalMonitorStateException。 调用任意对象的 wait() 方法导致该线程原创 2017-11-03 10:16:20 · 615 阅读 · 0 评论 -
java-toString
public class Exe2{public static void main(String[] args){ Dog d=new Dog(); System.out.println(d);}}class Dog{ /* public String toString() { return "I,m"; }*/}原创 2017-09-12 11:53:32 · 149 阅读 · 0 评论 -
java-Random类
Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这转载 2017-11-26 19:38:20 · 684 阅读 · 0 评论 -
Map.Entry使用详解
1.Map.Entry说明Map是java中的接口,Map.Entry是Map的一个内部接口。Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为En转载 2017-12-23 16:05:55 · 285 阅读 · 0 评论 -
http协议&Tomcat
http协议:1.什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的 一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为 了提供一种发布和接收HTML页面的方法2.Http协议的组成 Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时, 你的浏览器会将你的转载 2017-12-17 19:06:57 · 295 阅读 · 0 评论 -
java-死锁现象及解决方法
摘自:http://blog.youkuaiyun.com/joejames/article/details/37960873所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不转载 2017-11-02 21:46:05 · 2878 阅读 · 0 评论 -
java--charAt()
public class TestString{ public static void main(String[] args) { int lowCount=0,hCount=0,oCount=0; String S="alhjfweoihfHIFGIUE154355644164"; for(int i=0;i<S.len原创 2017-10-16 20:07:05 · 264 阅读 · 0 评论 -
java-equals
先来说说==:==在比较基本数据类型时,如果两个值相同,则结果为true 而在比较引用时,如果引用指向内存中的同一对象,结果为trueequals原意也就是在Object中,x.equals(y)当x和y 是同一个对象的引用是返回true,否则返回false在String 中,equals被重写,x.equals(y)当x和y 所引用的对象是同一类对象,原创 2017-09-12 14:56:40 · 312 阅读 · 0 评论 -
java-split()
public class Test{ public static void main(String[] args) { String s="1,2;3,4,5;6,7,8"; String[] sF=s.split(";"); Double[][] d; d=new Double[sF.length][]; for(in原创 2017-10-18 10:48:41 · 151 阅读 · 0 评论 -
java-多态
多态的三个条件: 1.要有继承 2.要有重写 3.父类引用指向子类对象原创 2017-09-13 10:07:42 · 195 阅读 · 0 评论 -
java-final
final的变量的值不能被改变final的方法不能被重写final的类不能被继承“`“`public class Fin{public static void main(String []args) { T t=new T(); } }class T{ final int i=9; final void fin() { System.out.pri原创 2017-10-09 09:23:01 · 161 阅读 · 0 评论 -
java-抽象
含有抽象方法的类必须声明为抽象类,抽象类必须被继承,抽象方法必须被重写抽象类不能被实例化抽象方法只需声明,不需实现,在子类被重写时实现abstract class Abs{ //抽象类不能被实例化 abstract void method();}class Ab extends Abs{ void method(){ //重写 System.out.printl原创 2017-10-09 08:54:21 · 258 阅读 · 0 评论 -
java-super关键字
public class Super{ public static void main(String[] args) { TestSup t=new TestSup(); //TestSup t=new TestSup(1); }}class K{ private int i; //K() //{ // i=10; //原创 2017-09-12 09:55:22 · 172 阅读 · 0 评论 -
对象转型
public class Exe1{public static void main(String[] args){ Person p=new Person(1); Student s1=new Student(12,"john"); p=new Student(12,"nihao"); Student s2=(Student)p;//想调用student新增的属性,强原创 2017-09-13 08:41:20 · 154 阅读 · 0 评论 -
java-方法覆盖
方法重写时,最好copy,否则容易出错 在子类中可以根据需要对从基类中继承来的方法进行重写 重写方法必须和被重写方法具有相同方法名称,参数列表和返回类型 重写方法不能使用比被重写方法更严格的访问权限class OverRide{ int x; void run() { System.out.print(x); } public static vo原创 2017-09-11 11:40:12 · 902 阅读 · 0 评论 -
java继承
public class Anmial{ int age; String name; public static void main(String[] args) { Dog dog=new Dog(); dog.SetAge(10); System.out.print(dog.GetAge()); }}原创 2017-09-11 10:52:44 · 154 阅读 · 0 评论 -
循环
break ;结束循环continue;结束本次循环do(语句)-while(条件);先执行语句,在判断条件switch -case 多个case可以合并在一起原创 2017-09-11 09:48:25 · 152 阅读 · 0 评论 -
java内存分析
java执行内存分析 `public class Test1{int x;int y;// Test1(int x2,int y2) // { // x=x2; // y=y2; // }void m(int x1,int y1){ x=x1; y=y1; }public static void main原创 2017-09-11 09:47:05 · 147 阅读 · 0 评论