ThreadLocal使用
摘要:封装类 ThreadLocalClient.java package com.wzq.demoftl.thread.threadLocal; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public cla
阅读全文
posted @
2021-10-28 10:38
公众号/架构师与哈苏
阅读(30)
推荐(0) 编辑
三个线程按循序一个打印A一个打印B一个打印C 循环打印?
摘要:第一种 public static volatile int flag = 1; public static void printABC1(){ Thread t1 = new Thread(() -> { while (true) { synchronized (obj1) { while (fl
阅读全文
posted @
2021-08-23 17:35
公众号/架构师与哈苏
阅读(65)
推荐(0) 编辑
两个线程交叉打印一个打印A一个打印B 循环打印?
摘要:public static Object obj1 = new Object(); public static void printAB(){ Thread t1 = new Thread(() -> { while (true){ synchronized (obj1) { System.out.
阅读全文
posted @
2021-08-23 17:33
公众号/架构师与哈苏
阅读(81)
推荐(0) 编辑
CycliBarriar和CountdownLatch(计数器)
摘要:CyclicBarrier可以重复使用,而CountdownLatch不能重复使用。 countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行。 是通过一个计数器来实现的,计数器的初始值是线程的数量。通过countDown()来减一,等减到0,await()方法就进入等待run状态
阅读全文
posted @
2021-08-10 14:51
公众号/架构师与哈苏
阅读(164)
推荐(0) 编辑
ThreadPoolExecutor(线程池)的参数
摘要:构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory thread
阅读全文
posted @
2021-08-10 11:03
公众号/架构师与哈苏
阅读(61)
推荐(0) 编辑
ReentrantReadWriteLock(读写锁)
摘要:为了提高性能,java提供了读写锁, 读锁: 在读的地方使用读锁,可以多个线程同时读。 写锁: 在写的地方使用写锁,只要有一个线程在写,其他线程就必须等待 例子: public static ReadWriteLock readWriteLock = new ReentrantReadWriteLo
阅读全文
posted @
2021-08-09 17:05
公众号/架构师与哈苏
阅读(47)
推荐(0) 编辑
Semaphore(信号量)
摘要:Semaphore是什么 Semaphore通常我们叫它信号量,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。 使用场景 通常用于哪些资源有明确访问数量限制的场景,常用于限流。 Sempahore常用方法说明 acquire() 获取一个令牌,在获取到令牌、或者被其
阅读全文
posted @
2021-08-09 16:14
公众号/架构师与哈苏
阅读(176)
推荐(0) 编辑
ReentrantLock中的Condition(等待和唤醒)
摘要:Condition 类的 awiat 方法和 Object 类的 wait 方法等效 Condition 类的 signal 方法和 Object 类的 notify 方法等效 Condition 类的 signalAll 方法和 Object 类的 notifyAll 方法等效 Reentrant
阅读全文
posted @
2021-08-09 15:21
公众号/架构师与哈苏
阅读(210)
推荐(0) 编辑
ReentrantLock可重入锁lock,tryLock的区别
摘要:void lock(); Acquires the lock. Acquires the lock if it is not held by another thread and returns immediately, setting the lock hold count to one. If
阅读全文
posted @
2021-08-09 14:42
公众号/架构师与哈苏
阅读(127)
推荐(0) 编辑
守护线程
摘要:定义 守护线程-也称"服务线程",他是后台线程,它有一个特性,即为用户线程提供公共服务,在没有用户线程可服务时会自动离开。例如:垃圾回收线程,当JVM中所有线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。 特点 守护线程的优先级比较低,用于为系统中的其他对
阅读全文
posted @
2021-08-06 15:33
公众号/架构师与哈苏
阅读(48)
推荐(0) 编辑
线程的5个状态
摘要:原理 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New、就 绪( Runnable 行( Running)、阻塞( Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直"霸占"着CPU独自运 行,所以C
阅读全文
posted @
2021-08-06 14:41
公众号/架构师与哈苏
阅读(183)
推荐(0) 编辑
终止线程4中方式
摘要:1.正常运行 程序运行结束,线程自动结束 2.使用退出标志退出线程 一般run方法执行完,线程就会正常结束,然而有些线程需要他们长时间run,只有外部某些条件满足的情况下,才能关闭这些线程。我们就可以通过一个变量来控制。 package com.wzq.demoftl.thread; public
阅读全文
posted @
2021-08-06 11:02
公众号/架构师与哈苏
阅读(105)
推荐(0) 编辑
线程池的好处
摘要:第一点:降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二点:提高响应速度。当任务达到时,任务可以不需要等到线程创建就能立即执行。 第三节:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控
阅读全文
posted @
2021-08-06 09:54
公众号/架构师与哈苏
阅读(76)
推荐(0) 编辑
Volatile关键字
摘要:1.可见性 本质是在告诉jvm当前变量在寄存器(工作内存)中的值不确定,需要从主存中读取。 2.禁止重排序 对它执行的指令不可以乱序,防止了其他线程拿到一个半初始化的对象,使用内存屏障。
阅读全文
posted @
2021-08-05 17:08
公众号/架构师与哈苏
阅读(24)
推荐(0) 编辑
Synchronized关键字
摘要:synchronized关键字 1.原子性 2.可见性 理解 java早期版本中,synchronized属于重量级锁,效率底下,java的线程是映射到操作系统的原生线程之上的。 唤起和挂起,都需要原生系统帮忙完成。 java6之后java官方从jvm层面对synchronized较大的优化,如:自
阅读全文
posted @
2021-08-05 16:52
公众号/架构师与哈苏
阅读(22)
推荐(0) 编辑
Java线程池中submit()和execute()方法有什么区别
摘要:两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中,而submit()方法返回有计算结构的Future对象,它定义在ExecutorService接口中,它拓展了Executor接口,其他线程池类像ThreadPoolExecutor和Sche
阅读全文
posted @
2021-08-05 16:21
公众号/架构师与哈苏
阅读(256)
推荐(0) 编辑
Thread类中yield方法
摘要:Yield方法可以暂停当前正在执行的线程对象,让其他有相同优先级的线程执行。它是一个静态方法而且只保证当前线程放弃CPU占用而不能保证其它线程一定能占用CPU,执行yield()的线程有可能在进入到暂停状态后马上又被执行。 Thread t1 = new Thread(() -> { System.
阅读全文
posted @
2021-08-05 15:45
公众号/架构师与哈苏
阅读(110)
推荐(0) 编辑
SynchronizedMap和ConcurrentHashMap有什么区别
摘要:SynchronizedMap实现上在调用Map的所有方法是,对整个map进行了同步! public V put(K key, V value) { synchronized (mutex) {return m.put(key, value);} } ConcurrentHashMap的实现却更加精
阅读全文
posted @
2021-08-05 11:47
公众号/架构师与哈苏
阅读(45)
推荐(0) 编辑
join控制线程的执行循序 T1 -> T2 -> T3
摘要:/** * 控制线程的执行循序 T1 -> T2 -> T3 * join实现 */ public static void join(){ Thread t1 = new Thread(() -> { System.out.println("hello my is T1!"); }); Thread
阅读全文
posted @
2021-08-05 11:34
公众号/架构师与哈苏
阅读(20)
推荐(0) 编辑
Synchronized和ReentranLock的区别
摘要:1.底层实现上来说? Synchronized是JVM层面的锁,是Java关键字,通过monitor对象来完成。 ReentranLock是API层面的锁底层使用AQS。 2.是否可手动释放锁? synchronized不需要用户手动释放锁。 ReentranLock可以手动释放锁,一般通过lock
阅读全文
posted @
2021-08-05 11:15
公众号/架构师与哈苏
阅读(245)
推荐(0) 编辑