
多线程
Coder米
:)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java实现消费者生产者
import java.util.LinkedList;/** * @auther: 巨未 * @DATE: 2021/9/7 0007 23:45 * @Description: 仓库 */public class Storage { // 仓库容量 private final int MAX_SIZE = 10; // 仓库存储的载体 private LinkedList<Object> list = new LinkedList<>原创 2021-09-08 00:05:15 · 362 阅读 · 2 评论 -
volatile关键字实现轻量级同步机制/统计1秒内可以进行多少次加操作
特点:1.线程的可见性(加了volatile关键字,主线程修改标志位时,子线程可以立即看到)2.防止指令的重排序(有序性) thread1 a+=1 thread2 a+=1 将a=1从主内存备份到线程1私有内存,检测是否有volatile修饰,在私有内存中若对副本进行修改, 则立即将主内存里的值回写 (回写步骤:1.内容回写(直接修改当前值为最新的) ...原创 2019-06-11 09:01:00 · 414 阅读 · 0 评论 -
多线程 模拟火车票售卖场景
一、模拟火车票售卖场景,三个窗口售卖A-B地的火车票,火车票共100张。要求:编号1-100 打印示例:窗口1售卖火车票66窗口:写3个线程,import java.util.Random;/** * @auther: 巨未 * @DATE: 2019/4/12 0012 23:18 * @Description: */class Tickets { privat...原创 2019-06-11 09:10:55 · 1268 阅读 · 0 评论 -
Synchronize关键字
线程安全,提供同步机制,重量级锁(待定)—>锁的优化原创 2019-06-11 09:37:56 · 869 阅读 · 0 评论 -
CAS机制(compare and swap)及ABA问题
CAS有3个操作数,内存值V,旧的预期值A,要修改的值B,当且仅当预期值A和内存值V相同时,将内存值的内容修改为B,否则什么也不做两步操作:1.读取内存V的值为A(预期值)2.当A和内存值V相同时,将内存值的内容修改为B,否则循环第一步...原创 2019-06-11 10:08:40 · 997 阅读 · 0 评论 -
源码解析:ReenTrantLock(重入锁)/公平性锁/非公平性锁/AQS是怎样实现的?
公平性锁(true):两个线程交替执行,按照线程请求锁的顺序来获取锁非公平性锁(默认):两个线程随机执行,获取锁的线程不是按照先来后到的顺序获取,而是抢夺式获取锁...原创 2019-06-11 10:41:15 · 245 阅读 · 0 评论 -
多线程中的锁机制(悲观锁/乐观锁/偏向锁/自旋锁(轻量级锁))
悲观锁:每次对数据的操作,都会担心数据被修改,每次操作时要对数据进行加锁只有获取锁的线程才能操作该数据,操作该数据其他线程就会被阻塞(synchronize锁就是悲观锁的体现)使用场景:写多读少缺点:悲观锁的使用需要不断加锁,释放锁。这样会引起线程的上下文切换和延时调度,会影响系统性能未获取锁的线程会被阻塞住。...原创 2019-06-11 10:43:12 · 1698 阅读 · 0 评论 -
线程间通信
父线程给子线程传递信息:构造函数子线程给父线程传递信息: FutureTask:实现Callable接口时,有一个call方法,有返回值原创 2019-06-11 16:29:28 · 156 阅读 · 0 评论 -
多线程实现轮询打印数据
如图:要打印数字1——100,让三个线程打印,线程1打印1,2,3,4,5线程2打印6,7,8,9,10线程3打印11,12,13,14,15线程1打印16,17,18,19,20线程2打印21。。。线程3打印26。。。实现:public class PrintDemo {static class Value { private volatile int n...原创 2019-06-11 16:34:01 · 967 阅读 · 0 评论 -
三个线程ID为ABC,每个将自己的ID在屏幕打印10遍,结果按ABCABC...样式显示
一、如图ABCABCMain.javapackage PrintABC;public class ABCABCMain { public static void main(String[] args) { ThreadName threadName = new ThreadName(); threadName.setIndex(0); ...原创 2019-06-11 16:42:18 · 344 阅读 · 0 评论 -
初识线程池
一、初识线程池需要掌握以下几点为什么要有线程池?什么是线程池?使用线程池有什么好处?在多线程的情况下,创建线程的方式有三种,并且在run()方法完成后自动回收该线程,但是在实际的操作系统里,如果需要创建上千甚至上百万个线程,创建线程需要时间,销毁的时候也需要时间,但当创建和销毁线程的时间远远大于线程的执行时间时,这样的情况非常不友好,因为内存资源是有限的,大量的线程创建和销毁上下文切换时会...原创 2019-05-07 15:44:01 · 209 阅读 · 0 评论 -
银行家算法概述及Java实现
一、银行家算法银行家算法是一种最有代表性的避免死锁的算法。又被称为“资源分配拒绝”法。在银行家算法中需要定义一些数据结构:1)可利用资源向量Available是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。2)最大需求矩阵Max、这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资...原创 2019-05-09 20:16:25 · 11989 阅读 · 7 评论 -
java创建线程的三种方式
一、实现Runnable接口步骤:(1)创建自定义类并实现Runable接口(2)实例化自定义的类(3)将自定义的类的实例作为参数传给Thread类,创建thread实例(4)调用thread实例的start()方法,启动子进程代码:class ThreadDemo implements Runnable { //实现Runnable接口 //重写run方法 ...原创 2019-04-11 20:40:29 · 157 阅读 · 0 评论 -
源码剖析ConcurrentHashMap及ConcurrentHashMap和HashMap、HashTable的区别
一、ConcurrentHashMapjdk1.7源码分析ConcurrentHashMap:(在源码中可以看到自jdk1.5开始引入ConcurrentHashMap)ConcurrentHashMap是对HashMap线程不安全的优化,使其线程安全且高效。下面对源码的一些内容做以分析:1、继承关系(jdk1.5开始)继承了AbstractMap、实现了ConcurrentMap和序列...原创 2019-04-26 10:38:05 · 745 阅读 · 0 评论 -
ConcurrentHashMap的扩容方法详解
一、ConcurrentHashMap扩容(jdk1.7)扩容只针对ConcurrentHashMap中的hashEntry类型的table数组进行扩容。方法在Segment类中:rehash() , 扩容倍数为:2倍扩容源码解析: private void rehash(HashEntry<K,V> node) { //先将需要扩容的table数组进行拷贝 ...原创 2019-04-27 00:17:02 · 9656 阅读 · 4 评论 -
源码解析线程池的执行流程
任务被提交到线程池,会先判断当前线程数量是否小于corePoolSize,如果小于则创建线程来执行提交的任务,否则将任务放入workQueue队列,如果workQueue满了,则判断当前线程数量是否小于maximumPoolSize,如果小于则创建线程执行任务,否则就会调用handler,以表示线程池拒绝接收任务...原创 2019-05-08 23:45:18 · 208 阅读 · 0 评论 -
线程池中Runable和Callable任务类型的区别
上篇文章讲了线程池的工作流程,在提交任务的时候有两个方法,submit和execute,submit方法在ExecutorService中出现,被AbstractExecutorService继承重写,有两种不同的参数,Runable和Callable两种任务类型。那么这两种任务类型有什么区别呢?从下面两段源码中看出,不管是Runanble还是Callable类型的任务最终都会被转换成Runn...原创 2019-05-09 00:21:10 · 620 阅读 · 0 评论 -
Java简述进程与线程的关系
一、进程与线程进程进程是操作系统资源分配的单位 例:I/O资源,内存资源…线程线程是资源调度的单位,真正执行的指令 例:操作数据的执行流在Java内存模型中:线程共享的:方法区、堆区线程私有的:虚拟机栈、本地方法栈、程序计数器进程和线程的关系进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,线程只是一个进程中的不同执行路径,有自己的堆栈和局...原创 2019-05-06 21:00:21 · 1644 阅读 · 0 评论 -
线程的常用方法
的原创 2019-05-06 21:11:03 · 566 阅读 · 0 评论 -
线程的状态转换
才原创 2019-05-06 21:28:48 · 294 阅读 · 0 评论 -
Java多线程——死锁概述、银行家算法
一、死锁的一些常识概念死锁是指两个或两个以上的线程在执行过程中,由于竞争资源而造成的阻塞问题,若无外力作用下,他们将无法推进下去,此时系统处于死锁状态产生的原因竞争资源产生死锁进程顺序推进不当出现死锁的必要条件互斥条件: 资源每次只能是一个线程使用请求与保持条件 :一个线程因请求资源而阻塞时,对已经获取的资源保持不放不可剥夺条件 : 线程已获取的资源,在未使用之...原创 2019-05-09 20:14:45 · 645 阅读 · 0 评论 -
java多线程实现较大文件的拷贝功能
一、问题描述:已知目录下一个较大文件a.txt(内容4G大小),运用多线程将此文件内容拷贝的另一个目录下。之前在IO流IO流单线程进行文件内容的复制写过这样的代码。但是这类方法适用于内容较小的文件,内容过大的话,拷贝速度会变慢,效率非常低。这次运用多线程来进行文件拷贝,大大节省了CPU的利用率,让程序变得更加高效。二、思路多线程处理这个问题,大概思路就是,将整个待拷贝文件内容分成若干等份(...原创 2019-04-11 11:34:59 · 2381 阅读 · 0 评论