
高并发编程
oJueQiang123456
这个作者很懒,什么都没留下…
展开
-
高并发编程:5、Join方法介绍和经典案例
一、概述join的作用,让父线程等待子线程结束之后才能继续运行 ,join的兄弟线程依然是并行执行。 案列:健康信息检查:已收集3台集服务器信息,并记录第一台开始收集时间和最后一台结束收集时间。二、代码1、不使用joinpackage com.cfl.thread;import sun.util.logging.resources.logging;/** * Join ...原创 2019-07-07 23:42:53 · 241 阅读 · 0 评论 -
高并发编程:10、自定义锁,实现synchronized的设置超时
一、概述当有10个线程在调用一个被synchronized的方法时,只有当前拿到锁的线程执行完之后,其它9个线程才能有一个线程抢到锁。反复如此,如果方法固定调用时长为10秒,执行完成之后就是100秒。 所以当我们调用这个方法的时候想要设置一个超时时间,超过之间就放弃调用。二、代码public class Thread13 { public static void main(St...原创 2019-08-14 15:38:01 · 3292 阅读 · 0 评论 -
高并发编程:11、程序添加钩子、捕捉线程中抛出的异常、打印调用关系
一、概述添加钩子addShutdownHook: 程序结束时会执行钩子程序里面的代码,命中行中kill程序也会执行,但kill -9 钩子程序不会执行 捕捉线程中抛出的异常 打印调用关系二、代码public class Thread14 { public static void main(String[] args) { // 钩子程序 Runtime.getRuntim...原创 2019-08-17 19:26:10 · 207 阅读 · 0 评论 -
高并发编程:12、简易版线程池
一、概述支持最小线程数,预估线程数,最大线程数 支持最大任务数量 支持关闭线程池二、代码public class Thread15 { public static void main(String[] args) { SimpleThreadPool threadPool = new SimpleThreadPool(); for(int i = 0; i < 16...原创 2019-08-27 11:51:36 · 161 阅读 · 0 评论 -
原 高并发编程:13、多线程下的单例模式
一、概述多线程下的单例模式。 推荐使用第6或第7种模式。二、代码1、饿汉模式public class SingletonObject1 { private static final SingletonObject1 singletonObject1 = new SingletonObject1(); private SingletonObject1() { } ...原创 2019-09-08 21:52:37 · 173 阅读 · 0 评论 -
高并发编程:14、线程的waitSet
public class Thread16 { private static final Object LOCK = new Object(); public static void main(String[] args) { for(int i = 0; i < 10; i++) { new Thread("thread"+i) { @Override ...原创 2019-09-08 22:19:36 · 217 阅读 · 0 评论 -
高并发编程:15、缓存一致性,volatile关键字(一)
一、概述cpu缓存一致性。 java线程缓存一致性。 volatile关键字:可见性。二、缓存一致性1、先看一段代码public class Thread17 { private static Integer INIT_VALUE = 0; private static Integer MAX_LIMIT = 50000; public static void ma...原创 2019-09-15 23:33:11 · 242 阅读 · 0 评论 -
高并发编程:15、缓存一致性,volatile关键字(二)
一、概述能保证修饰变量的可见性、有序性,但不能保证原子性。二、分析1、不能保证原子性public class Thread17 { private static volatile Integer INIT_VALUE = 0; private static Integer MAX_LIMIT = 500; public static void main(String[]...原创 2019-09-16 10:51:02 · 180 阅读 · 0 评论 -
高并发编程:16、观察者模式监控线程状态
一、概述观察者模式监控线程状态二、代码Clientpublic class Client { public static void main(String[] args) { ThreadLifeCycleObserver observer = new ThreadLifeCycleObserver(); observer.query(Arrays.asList("线程1...原创 2019-09-18 17:20:57 · 281 阅读 · 0 评论 -
高并发编程:9、wait、notify、notifyAll(三 完整的消费者、生产者)
一、概述上一篇文章介绍到多个生产者和多个消费者时,会使生产者和消费者都处于wait等待状态,处于假死状态。 所以用notifyAll替换notify,唤醒所有处于等待中的线程。二、代码public class Thread12 { private Integer index = 0; private volatile boolean isProducer = fa...原创 2019-08-01 23:14:02 · 160 阅读 · 0 评论 -
高并发编程:9、wait、notify、notifyAll(二 程序假死的原因分析)
一、概述多个生产者和多个消费者同时存在时导致出现程序假死的原因分析。二、代码public class Thread11 { private Integer index = 0; private volatile boolean isProducer = false; private Object LOCK = new Object(); public...原创 2019-07-25 23:03:51 · 419 阅读 · 0 评论 -
高并发编程:9、wait、notify、notifyAll
一、概述wait JVM会把该线程放到等待池中,等待其他线程唤醒该线程,执行该方法的线程对象,释放同步锁。 notify 执行该方法的线程唤醒在等待池中等待的任意一个线程。 notifyAll 把线程转到锁池中等待,执行该方法的线程唤醒在等待池中等待的所有线程。 执行notify或notifyAll时必须先抢到锁,也就是在synchronized里面 上述方法只能被同步监听锁对象来调用...原创 2019-07-25 22:24:54 · 156 阅读 · 0 评论 -
高并发编程:1、创建并启动线程
1、代码package com.cfl.thread;/** * 创建并启动线程 * @author chenfenli * */public class Thread1 { public static void main(String[] args) throws Exception { new Thread("Thread-1") { public void ...原创 2019-06-28 08:23:42 · 201 阅读 · 0 评论 -
高并发编程:6、结束线程生命周期的两种方式
一、概述1、优雅结束线程的生命周期interrupt: 设置线程当前中断标记为true,并未真正终止线程 isInterrupted: 检测当前的中断标记2、暴力结束线程的生命周期(异步网络请求:请求超时自动断开连接案例,可以自由断开请求)创建父线程,在父线程里创建一个记录时间的线程和真正执行任务的线程(设置为守护线程和join) 当超时的时候,记录时间线程调用父线程的in...原创 2019-07-13 00:01:57 · 252 阅读 · 0 评论 -
高并发编程:2、线程的生命周期
一、线程的生命周期 1、创建线程start()之后,线程进入到runnable状态,等待cpu的调用执行。 2、cpu调用线程,线程的状态由runnable改为running。 3、因为一个cpu在同一时间点只能执行一个任务,所以在执行一段时间之后,会切换到其它线程执行任务,状态由running改为runnable,然后在由cpu调用状态改为running,反复执行。 4、当线...原创 2019-06-29 16:41:39 · 171 阅读 · 0 评论 -
高并发编程:3、实现Runnable接口,来实现多个窗口排队叫号功能
ackage com.cfl.thread;public class Thread2 { private static TestRunnable testRunnable = new TestRunnable(); // 任务数 private static LinkedList<String> tasks = new LinkedList<String>();...原创 2019-06-29 19:07:33 · 674 阅读 · 0 评论 -
高并发编程:5、守护线程
当线程设置为守护线程时,其线程的父线程结束时,其线程也结束。如:程序开启一个守护线程向服务器发送心跳,当程序结束时,这个守护线程同样结束package com.cfl.thread;public class Thread4 { public static void main(String[] args) throws Exception { // 创建测试线程 Thread t...原创 2019-07-05 00:02:24 · 230 阅读 · 0 评论 -
高并发编程:7、synchronized
一、概述synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。 多线程访问synchronized方法或代码块时,变成了单线程串行的方式。二、基本认识package com.cfl.thread;public class Thread7 { private final static Object...原创 2019-07-14 22:01:09 · 873 阅读 · 0 评论 -
高并发编程:4、Thread构造方法源码解读
一、无参构造方法Thread()private static int threadInitNumber;private static synchronized int nextThreadNum() { return threadInitNumber++;}public Thread() { init(null, null, "Thread-" + nextThread...原创 2019-06-30 17:08:32 · 236 阅读 · 0 评论 -
高并发编程:8、多线程死锁分析
一、概述甲有两个儿子A和B,乙有两个儿子C和D。 甲有一把锁钥匙在A儿子身上,乙有一把锁钥匙在C儿子身上。 A认识D,需要找D帮忙拿一下东西,但是D没有钥匙,钥匙在大哥C身上,等待大哥C办完事才能拿到钥匙。 C认识B,需要找B帮忙拿一下东西,但B没有钥匙,钥匙在大哥A身上,等待大哥A办完事才能拿到钥匙。 这样就产生了大家都在等待对方大哥办完事情,但是这事情永远不能完成,这就叫死锁。二...原创 2019-07-19 08:20:37 · 219 阅读 · 0 评论 -
高并发编程:17、读写模式读写分离锁
一、概述当一个值在多线程下,既有读操作又有些操作,我们可以在读和写的时候添加锁,来保证线程安全, 但有很多种情况是,读多写少,这种时候再读的时候也加上锁,读的操作也串行化了,严重影响程序性能。 所以有了读、写分离锁,多个线程同时读,没有写的时候的时候并行化,其它情况串行化。 读 写 读 并行 串行 写 串行 串行二、代码1、自定义读写锁 /*...原创 2019-09-29 10:03:50 · 277 阅读 · 0 评论