随笔分类 - Java多线程
摘要:CountDownLatch CountDownLatch用来使一个线程或多个线程等待到其他线程完成。CountDownLatch有个初始值count,await方法会阻塞线程,直到通过countDown方法调用使count减少为0才会执行await方法后面的代码。 示例代码 MyThread50_
阅读全文
摘要:线程池类结构 1.Executor是顶级接口,有一个execute方法。 2.ExecutorService接口提供了管理线程的方法。 3.AbstractExecutorService管理普通线程,SchedulerExecutorService管理定时任务。 简单的示例 1.corePoolSi
阅读全文
摘要:这里详细分析interrupt(),interrupted(),isInterrupted()三个方法 interrupt() 中断这个线程,设置中断标识位 我们来找下如何设置中断标识位的 找到interrupt0()的源码,src/hotspot/share/prims/jvm.cpp 调用了Th
阅读全文
摘要:线程组 线程组可以批量管理线程和线程组对象。 一级关联 例子如下,建立一级关联。 输出结果如下 每隔三秒输出两个线程名称,符合预期。 线程组自动归组属性 java public class ThreadDomain49 { public static void main(String[] args)
阅读全文
摘要:BlockingQueue BlockingQueue、解决了多线程中,如何高效安全“传输”数据的问题。程序员无需关心什么时候阻塞线程,什么时候唤醒线程,该唤醒哪个线程。 方法介绍 BlockingQueue是Queue的子类 void put(E e) 插入指定元素,当BlockingQueue为
阅读全文
摘要:生产者消费者模型 生产者:生产任务的个体; 消费者:消费任务的个体; 缓冲区:是生产者和消费者之间的媒介,对生产者和消费者解耦。 当 缓冲区元素为满,生产者无法生产,消费者继续消费; 缓冲区元素为空,消费者无法消费,生产者继续生产; wait()/notify()生产者消费者模型 制作一个简单的缓冲
阅读全文
摘要:读写锁ReentrantReadWriteLock概述 读写锁ReentrantReadWriteLock,使用它比ReentrantLock效率更高。 读写锁表示两个锁,一个是读操作相关的锁,称为共享锁;另一个是写操作相关的锁,称为排他锁。 1、读和读之间不互斥,因为读操作不会有线程安全问题 2、
阅读全文
摘要:加锁和解锁 我们来看下ReentrantLock的基本用法 ThreadDomain35类 MyThread40_0类,增加线程 MyThread40_1类,减少线程 main方法,启动线程 输出结果如下 可以看到,lists的数量不会增加太多,也不会减少太多。当集合满,使增加线程等待,唤醒减少线程
阅读全文
摘要:wait(),notify()和notifyAll()介绍 1.wait() 当线程执行wait()时,会把当前的锁释放,然后让出CPU,进入等待状态。 只能在同步方法调用wait()。 2.notify() 当执行notify/notifyAll方法时,会唤醒一个处于等待该对象锁的线程,然后继续往
阅读全文
摘要:死锁 概念 当线程Thread 0持有锁Lock1,Thread 1持有锁Lock2,此时Thread 0申请Lock2锁的使用权,Thread 1申请Lock1锁的使用权,Thread 0和Thread 1都在无限地等待锁的使用权。这样就造成了死锁。 死锁是主要由于设计的问题。一旦出现死锁,死锁的
阅读全文
摘要:volatile volatile是一种轻量同步机制。请看例子 MyThread25类 输出结果如下 为什么程序始终不结束?说明mt.setRunning(false);没有起作用。 这里我们说下Java内存模型(JMM) java虚拟机有自己的内存模型(Java Memory Model,JMM)
阅读全文
摘要:多线程安全 脏读:多个线程对同一个对象的实例变量进行修改后访问,导致读到的数据是被修改过的。 实例 ThreadDomain16类 MyThread16_0类 MyThread16_1类 启动MyThread16_0 和MyThread16_1 线程 main方法 输出结果如下 理论上应该输出a n
阅读全文
摘要:Thread类的实例方法 start() start方法内部会调用方法start方法启动一个线程,该线程返回start方法,同时Java虚拟机调用native start0启动另一个线程调用run方法,此时有两个线程并行执行; 我们来分析下start0方法,start0到底是如何调用run方法的 T
阅读全文
摘要:1.线程和进程 1.1 进程 进程是操作系统的概念,我们运行的一个TIM.exe就是一个进程。 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设
阅读全文