Java
xiewz1112
这个作者很懒,什么都没留下…
展开
-
Thread之锁降级
锁降级锁降级是指持有写锁的同时,再获取读锁,最后释放写锁的过程。反之持有写锁,释放写锁,获取读锁的过程不是锁降级。锁降级的应用场景是数据不常变化,多线程可以并发处理数据。数据变更后,如果当前线程感知数据变化,则进行数据准备工作,同时其他线程被阻塞。锁降级的目的是数据准备完毕,释放写锁之前,获取读锁以感知其他线程对数据的更新。可降级的原因写锁为可重入的拍他锁,读锁为可重入的共享锁,之所以...原创 2018-09-11 13:39:33 · 447 阅读 · 0 评论 -
Thread之数据库连接
多线程下数据库连接对资源和时间相应都有很高要求。数据库连接资源十分昂贵,一般情况下应主动建立数据库连接池,限定池内连接数量,并应对线程尝试连接的时间进行限制。如下例。模型main线程1、控制所有子线程同时尝试获取连接 2、等待所有子线程完成后才统计连接成功获取数量和丢失数量 上述两个功能要求CountDownLatch类进行控制。子线程尝试获取连接,提供本线程内的连...原创 2018-09-05 11:45:54 · 666 阅读 · 0 评论 -
Thread之interrupt()函数解析
函数interrupt()对处于RUNNABLE或WAITING(包括TIME_WAITING)状态的线程进行中断,作用如下:RUNNABLE线程例如:package interrupt;public class MyThread extends Thread { @Override public void run() { for (int i = ...原创 2018-09-03 15:18:31 · 808 阅读 · 0 评论 -
Thread之锁的底层原理
java中锁比synchronized更具有灵活性,其底层原理简单说就是,集合了AbstractQueuedSynchronizer同步器。同步器作为上层的锁(或同步组件)和底层同步状态控制技术之间的桥梁,主要采用了同步队列、同步状态、CAS原子操作方法,实现了同步状态管理、线程排队、等待与唤醒等底层操作。同步器与锁隔离了现实者和使用者的关注点。 模型:class exampleLock...原创 2018-09-10 13:46:16 · 599 阅读 · 0 评论 -
Thread之volatile
volatilevolatile:一致性 static:唯一性 final:持续性volatile与Runnable在class implements Runnable时,如果在class中定义了volatile变量,为使该变量能够在多线程下被所有线程读写,即保证变量的唯一性,需要加上static。 如下例,在SafeShutdownThread中,thread2中修改线程t...原创 2018-09-07 10:12:30 · 442 阅读 · 0 评论 -
Thread之ReentrantLock
重入锁ReentrantLock是Lock接口的实现,ReentrantReadWriteLock是ReadWriteLock的实现。重入锁ReentrantLock的作用是,实现同一线程对同一把锁的重复加锁。重入锁分为公平锁和非公平锁,公平锁获取锁采用FIFO原则,不会出现“饥饿”线程,但会降低效率,相反,非公平锁的持有线程在释放锁之后,会大概率地再次持有锁,因而减少了线程切换的成本,提高了效率...原创 2018-09-10 17:06:03 · 137 阅读 · 0 评论 -
Thread之FutureTask
FutureTaskFutureTask扩展了接口Runnable和Future,因此它可以作为Runnable用于Executor.submit(),也可以直接进行FutureTask.run()。FutureTask的构造函数可以使用Callable进行构造。FutureTask主要用于在多线程下,一个线程需要等待另外一个线程将某项任务执行完毕后才能继续执行。编程模型protected ...原创 2018-09-20 15:47:30 · 1035 阅读 · 0 评论 -
Thread之并发工具类
CountDownLatch、CyclicBarrier、Semaphore、Exchanger是并发工具类,都通过聚集同步器对并发流程进行控制。CountDownLatch和CyclicBarrier均用于等待其他线程完成工作后本线程才继续执行,不同之处在后者可以循环(cyclic)使用,即出现错误可以使用CyclicBarrier.reset()方法重置屏障。Semaphore用于控制对特定资...原创 2018-09-21 15:37:25 · 273 阅读 · 0 评论 -
Thread之Executor框架
Executor框架自JDK5开始,Executor作为并发线程的核心框架,通过执行机制作用,与工作单元Runnable和Callable隔离开来。也就是说,Executor通过调度线程来执行工作单元(即任务)。Executor框架的主要部件1、任务:实现了Runnable(无返回结果)或者Callable(返回结果)接口的类。2、线程池执行器:实现了Executor接口的类,以及实现了继...原创 2018-09-21 19:08:06 · 210 阅读 · 0 评论 -
利用Spring Cloud Config 通过JCE进行对称加密,有趣
如题,对同一字符串进行多次分别加密后,得到新的字符串都不相同,再逐一反向解密都能得到原字符串。对称加密算法的实现原理是什么,有空需要学习一下。...原创 2018-10-16 12:39:33 · 287 阅读 · 0 评论 -
Thread之超时等待
超时等待超时等待方法:Object.wait(remaining),remaining为等待时间模型等待持续时间:remaining 超时时间:future = System.currentTimeMills + remaining 伪代码:public void waitMethod(long mills) { long remaining = mills;...原创 2018-09-04 18:23:01 · 849 阅读 · 0 评论 -
Thread之ThreadLocal解析
ThreadLocal用于保存线程独有变量,结构为以ThreadLocal为键,任意对象为值。 下面例子中,Profiler类通过使用ThreadLocal,计算调用时间消耗(从begin方法到end方法)。Profiler类的优点是两个静态方法begin和end的调用不用在同一个方法或类中。package com.threadlocal;import java.util.concurr...原创 2018-09-04 15:47:23 · 147 阅读 · 0 评论 -
Resource Connector Architecture
原创 2017-09-11 09:05:37 · 246 阅读 · 0 评论 -
模式学习
模式学习模式设计的六个原则单一职责原则 里氏替换原则 父子继承,子可有个性,子可重载父方法,方法参数范围扩大,子可重写父方法,子return范围可变小。 依赖倒置原则 可分为constructor注入依赖和setter注入依赖接口隔离原则 拆分复杂接口迪米特原则 最少知识开闭原则 对修改封闭,对扩展开放1、单例模式一般使用单例的扩展模...原创 2018-04-25 08:46:37 · 985 阅读 · 0 评论 -
列出目录下文件名称
import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.nio.file.FileVisitResult;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Pat...原创 2018-05-17 09:38:52 · 307 阅读 · 0 评论 -
模拟echo服务器
模拟echo服务器:package com.test;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java...原创 2018-05-21 11:19:05 · 194 阅读 · 0 评论 -
冒泡排序(加速)
package com.test;import java.util.Arrays;import java.util.Comparator;public class BubbleSort { private BubbleSort() { } // test public static void main(String[] args) { I...原创 2018-05-21 20:44:59 · 449 阅读 · 0 评论 -
二分搜索
package com.test;public class BinarySearch { private BinarySearch() {} //test public static void main(String[] args) { Integer[] x = new Integer[]{-1, 0, 3, 5, 6, 9, 10, 23, 45,...原创 2018-05-21 21:19:25 · 86 阅读 · 0 评论 -
列出目录下所有文件和目录
列出目录下所有文件和目录import java.io.File;public class Test { public static void main(String[] args) throws Exception { showDirectory(new File("/Users/apple/redis")); } private stati...原创 2018-05-16 21:15:02 · 1921 阅读 · 0 评论 -
Thread之等待/通知解析
例子:package com.waitnotify;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.TimeUnit;public class WaitNotify { static boolean flag = true; static Ob...原创 2018-09-04 13:39:37 · 430 阅读 · 0 评论 -
Thread之管道输入/输出流
管道输入/输出流:管道输入/输出流形式:PipedReader、PipedWriter、PipedInputStream、PipedOutputStream。 管道输入/输出流与文件输入/输出流或者网络输入/输出流区别在于,管道输入/输出流注意用线程数据传递,并且直接在内存上进行读写。 例子:package com.test;import java.io.IOException;...原创 2018-09-04 14:26:38 · 368 阅读 · 0 评论 -
Thread之join()解析
调用thread.join()方法的线程,需要等待thread完成后才能继续执行代码。 例子:线程main和Thread-0~1依次等待前一个线程完成后,才能继续执行join()方法之后的代码。package com.join;import java.util.concurrent.TimeUnit;public class Join { public static void...原创 2018-09-04 15:09:24 · 165 阅读 · 0 评论 -
Servlet异步处理示例
@WebServlet(urlPattens=”/demo”, asyncSupported = true) public class AsyncDemoServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletRespone response转载 2017-04-17 14:53:32 · 466 阅读 · 0 评论