基础知识资料
文章平均质量分 77
金正则
这个作者很懒,什么都没留下…
展开
-
自旋锁 spinlock
import java.util.concurrent.atomic.AtomicReference;/** *自旋锁 spinlock :指尝试获取锁的线程不立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少上下文切换的消耗,缺点 循环会消耗cpu。 * */public class SpinLockDemo { AtomicReference atomicReference = new AtomicReference(); public void myLock(..原创 2021-02-04 19:13:08 · 119 阅读 · 0 评论 -
公平锁/非公平锁 可重入锁(又称递归锁) ReentrantLock
import java.util.concurrent.locks.ReentrantLock;/** * 1 公平锁/非公平锁:多线程下是否按照申请锁的队列来获取锁,前来后到,加塞问题;公平锁照申请锁的队列来获取锁;非公平锁申请顺序不代表获得锁的顺序 * ReentrantLock locl = new ReentrantLock();//非公平锁 * ReentrantLock locl = new ReentrantLock(false);//非公平锁 * .原创 2021-01-29 14:39:31 · 108 阅读 · 0 评论 -
集合类线程不安全问题 解决方案 ArrayList
import java.util.ArrayList;import java.util.List;import java.util.UUID;/** * 集合类不安全的问题 * ArrayList 线程不安全实例:(map set) * 平时所用为单线程 一般不会出现问题 * 原因 ArrayList.add()方法没有加锁 * 异常:Exception in thread "Thread-7" java.util.ConcurrentModificationException *..原创 2021-01-28 16:58:02 · 116 阅读 · 0 评论 -
ABA问题的解决
import javax.swing.plaf.PanelUI;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicStampedReference;/** * ABA问题的解决: */public class ABADemo { static AtomicInteger atomi.原创 2020-11-12 16:00:52 · 173 阅读 · 2 评论 -
cas CompareAndSwap
import org.apache.xmlbeans.impl.xb.xsdschema.Public;import java.util.concurrent.atomic.AtomicInteger;/** * 1 cas : CompareAndSet * 2 比较并交换 * 3 自旋锁 * 4 Unsafe类 */public class CasDemo { public static void main(String[] ags){ Atomic...原创 2020-11-09 18:02:04 · 253 阅读 · 0 评论 -
singleton 单线程多线程 单例模式
public class SingletonDemo { private static SingletonDemo instance = null; private SingletonDemo(){ System.out.println(Thread.currentThread().getName() + " 我是构造方法SingletonDemo()"); } public static SingletonDemo getInstance(){ .原创 2020-10-23 17:52:02 · 126 阅读 · 0 评论 -
volatile
package com.founder.rhip.ehr.dto.he;import org.omg.Messaging.SYNC_WITH_TRANSPORT;import sun.management.snmp.jvminstr.JvmThreadInstanceEntryImpl;import sun.org.mozilla.javascript.internal.ast.WhileLoop;import java.util.concurrent.TimeUnit;import jav.原创 2020-10-23 17:26:11 · 128 阅读 · 0 评论 -
验证volatile不保证原子性
验证volatile不保证原子性* 原子性:完整性,不可分割性。某个线程在做某个业务时,不可以被加塞或被分割,需要整体完成,要么同时成功,要么同时失败。* volatile不保证原子性原因:i++,实际上分为4步,取值,+,更新主物理内存;volatile不保证更新主物理内存时,线程竞争存在覆盖重写,丢数据。* 解决方法:1 使用synchronized (大材小用) 2 使用juc下的 AtomicInteger(原子……)代码:class MyData{.原创 2020-10-20 17:43:08 · 207 阅读 · 0 评论 -
验证volatile可见性
主物理内存;线程工作内存;某个线程工作内存修改之后更新主物理内存的数据,别的线程的工作内存立马更根据著物理内存的更新而更新,为volatile可见性代码:import java.util.concurrent.TimeUnit;class MyData{ //int number = 0 ; volatile int number = 0 ; public void setTo60(){ this.number = 60; }}/** * .原创 2020-10-20 15:40:17 · 148 阅读 · 0 评论 -
排序 Comparator Comparable
一:Comparable:实现Comparable无参接口,重写equals()和hashCode()方法,重写compareTo(Object o)方法;二:Comparator:实现Comparator有参接口,重写compare()方法三:Comparator 与 Comparable共存时,Comparator优先package com.mall.controllor.ale...原创 2020-03-23 10:30:11 · 127 阅读 · 0 评论 -
同步锁 synchronized 线程安全
线程安全诱因:1 存在共享数据,2 存在多条线程同时操作共享数据互斥锁的特性:1 互斥性:只允许同一时间只有一个线程持有某个对象锁,保证同一时间只有一个线程对需要同步的代码块进行访问,互斥性也称为操作原子性2 可见性:必须保证在锁被释放之前,对共享变量所做的修改,对后面获得该锁的另一个线程是可见的,否则另一个线程可能会使用本地缓存副本,引起不一致。3 synchronizad 锁的不...原创 2020-03-19 11:10:41 · 213 阅读 · 0 评论 -
中断线程 interrupt
调用interrupt(),通知线程应该中断:1 如果线程处于阻塞状态,则线程立即退出被阻塞状态,并抛出一个InterruptedException异常;2 如果线程处于正常活动状态,那package com.mall.controllor.alene;import sun.management.snmp.jvminstr.JvmThreadInstanceEntryImpl;...原创 2020-03-18 16:15:29 · 155 阅读 · 0 评论 -
Thread.yield()
package com.mall.controllor.alene;/** * Created by 60341 on 2020/3/18. */public class YieldDemo { //Thread.yield();暗示线程调度器该线程让出cpu。但是它对锁没影响 public static void main(String[] args) { ...原创 2020-03-18 15:06:08 · 519 阅读 · 0 评论 -
notify和notifyAll
1 对象的方法,用于唤醒等待池中的线程,将等待池中的线程唤醒至锁池;2 notify()随机唤醒等待池中的任意一个线程至锁池,notifyAll()唤醒等待池中所有的线程至锁池...原创 2020-03-18 15:04:51 · 116 阅读 · 0 评论 -
等待池 锁池
1 等待池和锁池都是对象的,就像lock是对象的一样,由对象调用2 当锁被线程A占用,线程B和C就只能进入进入锁池,等待锁被A释放后竞争锁; 当线程A调用Object.wait()之后,线程A释放锁,进入等待池,等待被唤醒; 当线程A调用Object.wait(1000)之后,线程A释放锁,进入等待池,1秒之后,进入锁池,等待竞争锁; 线程B和C在锁池中等待竞争锁,如果B得到锁,则...原创 2020-03-18 15:04:11 · 189 阅读 · 0 评论 -
Thread 处理线程返回值
方法一: 主线程等待法 缺点,等待时间不精准,以设定的等待时间为一个单位,如果返回的变量比较多,则while条件繁琐。方法二: 使用Thread类的join()阻塞当前线程以等待当前线程处理完毕。缺点:处理细读不够。方法三: 使用Callable接口实现; 通过FutureTask Or 线程池Executors.newCachedThreadPool()获取。使用线程池优势:可以提交多个...原创 2020-03-18 11:34:06 · 3108 阅读 · 0 评论 -
loadClass和forName的区别
public class LoaderDifference { public static void main(String[] args) throws ClassNotFoundException { ClassLoader classLoader = Robot.class.getClassLoader();//延迟加载,不进行初始化,不初始化static块 ...原创 2020-03-16 15:12:40 · 120 阅读 · 0 评论 -
自定义ClassLoader
一 MyClassLoader.javapackage com.mall.controllor.portal;import java.io.*;/** * Created by 60341 on 2020/3/16. */public class MyClassLoader extends ClassLoader { private String path; ...原创 2020-03-16 14:00:04 · 109 阅读 · 0 评论 -
反射实例
package com.mall.controllor.portal;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * Created by 60341 on 2020/3/16. */publ...原创 2020-03-16 09:17:37 · 88 阅读 · 0 评论 -
socket tcp/udp
一 : TCP1 TCPServer.javaimport java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TCPServer { public static void main(String[] args ) throws IOException {...原创 2020-02-26 13:27:34 · 110 阅读 · 0 评论 -
单点登陆 SSO 原理
1 系统:登陆系统sso,业务应用系统2个app1,app22 基本原理基础:(1) browser中得cookie和Tomcat Server中得session,首次在browser中访问TomcatServer,登陆后在Tomcat中产生session,并且把sessionID返回给browser,browser在cookie中存储sessionId。第二次访问TomcatServer,b...原创 2020-01-03 11:15:22 · 100 阅读 · 0 评论 -
正则表达式 验证是数字
1 java String num = "1.23"; Pattern pattern = Pattern.compile("-?[0-9]+.?[0-9]*"); Matcher mat = pattern.matcher(num); if(mat.matches()){ System.out.println("是数字");原创 2017-11-13 17:13:09 · 589 阅读 · 0 评论 -
jsp ${${}} el表达式 嵌套
1 el表达式是不能嵌套的,即不能写成${ ${} }或${xxx.[xxx.xxx]}, 2 当你的ooo是Map时,可以写成${ooo[xxx.xxx]}3 其余的单个属性直接${xxx}4 对象中的属性${xxx.xxx},如果对象中又有对象依此类推5 foreach循环,读取下标的只需这样即可:${status.count}转载 2017-08-25 17:23:14 · 5918 阅读 · 0 评论 -
常用的正则表达式
一、校验数字的表达式1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\转载 2017-07-27 10:40:06 · 177 阅读 · 0 评论