随笔分类 - Java
摘要:java多线程实现生产者与消费者模型 //测试类 public class TestPC { public static void main(String[] args) { SynContainer container = new SynContainer(); new Thread(new Pr
阅读全文
摘要:知识前景:在java虚拟机的运行时数据中有一块地方叫虚拟机栈,每个线程独有。栈中存放一个一个栈针,每个栈针对应程序中的一个方法,若有main方法则位于最底层。栈针中有一个局部变量表:记录局部变量;和一个操作数栈:便于执行指令操作。 i++和++i的操作不同于其他的赋值和加减乘除等操作,它是直接在局部
阅读全文
摘要:在这里记录自己查询网上资料后自己实现的JAVA版本跳表的代码,比较简陋。实现过程中遇到个低级错误,在方法内部尝试修改实参引用的指向是无效的(实际上修改的是形参指向,方法内部只能修改实参指向的具体内容,无法修改实参指向),以后一定切记。 public class SkipList { private
阅读全文
摘要:概念 代理的目标是在不修改现有代码的前提下对方法进行增强,实现在执行方法之前或之后进行某些操作,如日志记录、数据库事务操作等。 静态代理。由我们自己去定义一个代理类,去包含要被代理的类(以下称为目标类),并暴露和目标类一样的方法供外界调用,然后在这个方法里面调用目标类的具体方法,此时就可以在调用目标
阅读全文
摘要:BIO模型 BIO即blocking IO,顾名思义是一种阻塞模型。当没有客户端连接时,服务端会一直阻塞,当有客户端新建连接时,服务端会新开一个线程去响应(不用多线程的话服务端同一时刻最多只能接收一个连接)。但不断的新开线程对服务器的压力是巨大的,为了缓解压力可以采用线程池技术实现线程复用,但这种做
阅读全文
摘要:下面是ReentrantLock非公平锁加锁流程: final void lock() { //调用CAS尝试获取锁 if (compareAndSetState(0, 1)) //尝试成功则修改当前拥有锁的线程是自己 setExclusiveOwnerThread(Thread.currentTh
阅读全文