
多线程
qq_43382364
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程的理解
线程的状态1.初始(NEW):新建一个线程的对象,还未调用start方法2.运行(RUNNABLE):java线程中将已经准备就绪(Ready)和正在运行中(Running)的两种状态都统称为“Runnable”。准备就绪的线程会被放在线程池中等待被调用3.阻塞(BLOCKED):是因为某种的原因而放弃了CPU的使用权,暂时的停止了运行。直到线程进入准备就绪(Ready)状态才会有机会转到运...原创 2019-07-31 23:42:20 · 190 阅读 · 0 评论 -
java多线程基础理解
8.创建一个新线程 1.继承Thread类 2.实现Runable接口原理是Thread也是一个实现了Runable接口的子类。2.1 它的run方法会对判断是否存在传入一个Runable实现的子类。2.2 即说明可以通过传入Runable接口的实现类从而调用重写的run方法2.3 或通过继承Thread重写run方法3.开启一个新线程必须是调用Thread的start方法。可...原创 2020-02-26 16:11:30 · 117 阅读 · 0 评论 -
TreadPoolExecutor类
TreadPoolExecutor类TreadPoolExecutor类 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...原创 2020-03-02 21:21:00 · 155 阅读 · 0 评论 -
Java里的阻塞队列
Java里的阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。BlockingQueue接口pu...原创 2020-03-02 16:40:37 · 118 阅读 · 0 评论 -
并发容器:CopyOnWriteArrayList、ConcurrentHashMap
并发容器:CopyOnWriteArrayList、ConcurrentHashMapJava集合的快速失败机制 “fail-fast”"fail-fast"是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生 fail-fast 机制。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的...原创 2020-03-02 15:06:52 · 187 阅读 · 0 评论 -
Future
Future Java中的Future和Future通常和线程池搭配使用,用来获取线程池返回执行后的返回值。我们假设通过Executors工厂方法构建一个线程池es ,es要执行某个任务有两种方式,一种是执行 es.execute(runnable) ,这种情况是没有返回值的; 另外一种情况是执行 es.submit(runnale)或者 es.submit(callable) ,这种情况会...原创 2020-03-02 00:41:41 · 109 阅读 · 0 评论 -
Exchanger
ExchangerExchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。...原创 2020-03-01 18:17:06 · 289 阅读 · 1 评论 -
Semaphore
SemaphoreSemaphore叫信号量,Semaphore有两个目的,第一个是多个共享资源互斥使用,第二个是并发线程数的控制。常用于限制可以访问某些资源的线程数量,例如通过 Semaphore 限流。简单的示例代码//书店位置类public class BookStroeSeat implements Runnable { Semaphore semaphore; ...原创 2020-03-01 16:19:30 · 266 阅读 · 0 评论 -
CyclicBarrier
CyclicBarrier1.构造方法public CyclicBarrier(int parties)public CyclicBarrier(int parties, Runnable barrierAction)parties 是参与线程的个数第二个构造方法有一个 Runnable 参数,这个参数的意思是最后一个到达线程要做的任务2.主要方法public int await...原创 2020-03-01 15:45:07 · 86 阅读 · 0 评论 -
CountdownLatch
CountdownLatch调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。//测试类public class CountdownLatchTest { pub...原创 2020-03-01 15:09:53 · 154 阅读 · 0 评论 -
ThreadLocal的简单理解
package com.roy.threadLock;import java.util.Random;/** * @Authror royLuo * @Date 2020/2/29 19:55 **/public class ControllerTest { //用空间解决共享变量的问题 //使用完后最好调用remove方法(必须注意) final st...原创 2020-02-29 20:42:56 · 119 阅读 · 0 评论 -
数据库连接池的简单实现
数据库连接池的简单实现package com.roy.pool;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.List;import java.util.concurrent.CopyOnWriteArrayList;imp...原创 2020-02-29 17:44:16 · 147 阅读 · 0 评论 -
Condition实现线程的通信
一、Condition是接口1.创建ReentrantLock2.调用它的newCondition方法获取ConditionCondition实现线程的通信使用Condition实现一个有界的队列ConditionObject是Condition的唯一一个实现1.线程没获取到锁就会被放到同步队列中 (双向链表) 线程在竞争cpu时间片,执行2.调用awatiy()方法就会把线程放到...原创 2020-02-29 15:17:54 · 221 阅读 · 0 评论 -
wait与notify线程之间的通信
线程之间的通信1.wait与notify是使用在同步代码块或同步方法中的2.他们都是Object的方法3.notify是需要获取锁的,会随机唤醒一个处理等待状态的线程4.wait方法是会释放锁的5.notifyAll会唤醒所有wait的线程,但是拿到cup时间片的线程只有一个package com.roy.condition;/** * @Authror royLuo * @D...原创 2020-02-29 15:13:02 · 144 阅读 · 0 评论 -
AbstractQueuedSynchronizer的学习
AbstractQueuedSynchronizerpublic class AQSDemo implements Lock { private Sycn sycn = new Sycn(); //实现同步器 private class Sycn extends AbstractQueuedSynchronizer{ @Override ...原创 2020-02-28 20:25:49 · 153 阅读 · 0 评论 -
final的内存语义
写final域的重排序规则写final域的重排序规则禁止把final域的写 重排序到构造函数之外读final域的重排序规则读final域的重排序规则是,在一个线程中,初次读对象引用与初次读该对象包含的final域,JMM禁止处理器重排序这两个操作(仅仅针对处理器)。编译器会在读final域操作的前面插入一个LoadLoad屏障。 ,可以重新安排语句的执行顺序。指令级并行的重排序现代处理器采用了指令级并行技术(Instruction-Level Parallelism, ILP)来将多条指令重叠执行。如果不存在...原创 2020-02-28 15:31:14 · 566 阅读 · 0 评论 -
happens-before理解
happens-before原则如果操作1 happens-before 操作2,那么第操作1的执行结果将对操作2可见,而且操作1的执行顺序排在第操作2之前。两个操作之间存在happens-before关系,并不意味着一定要按照happens-before原则制定的顺序来执行。如果重排序之后的执行结果与按照happens-before关系来执行的结果一致,那么这种重排序并不非法。...原创 2020-02-27 23:17:34 · 231 阅读 · 0 评论 -
Lock接口
java.util.concurrent.locks包下1.5jdk之后有的Lock接口(1)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock。(2)Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用...原创 2020-02-27 19:38:51 · 123 阅读 · 0 评论 -
jdk提供的原子类原理及使用
jdk1.5之后加入java.util.concurrent.atomic包下类1.原子更新基本类型例如:AtomicInteger类,调用getAndIncrement()2.原子更新数组例如:AtomicIntegerArray3.原子更新抽象类型例如:AtomicReference user = new AtomicReference<>();4.原子更新字段A...原创 2020-02-27 12:48:20 · 161 阅读 · 0 评论 -
volatile关键字的原理与使用
二、并发编程的3个基本概念(1)原子性定义: 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。(2)可见性定义:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。(3)有序性定义:即程序执行的顺序按照代码的先后顺序执行。二、volatile变量的特性(1)保证可见性,不保证原子性a.当写一个volati...原创 2020-02-27 12:44:13 · 111 阅读 · 0 评论 -
出现线程安全问题的条件
出现线程安全问题需要满足三个条件1.多线程的环境下2.必须有共享资源3.对资源进行非原子性操作原创 2020-02-27 00:20:28 · 811 阅读 · 0 评论 -
java锁的学习
锁的类型(从宏观分类)List item乐观锁(一种思想)在写之前先进行读取当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则重复读-比较-写java通过cas(原子操作)操作实现悲观锁...原创 2020-02-27 00:18:09 · 199 阅读 · 0 评论 -
java并发的概念
1.并发的概念:并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。2.并行的概念:指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。区别:并发和并行的区别就很明显了。它们虽然都说是...原创 2020-02-26 15:54:12 · 723 阅读 · 0 评论 -
java的Synchronized关键字锁
Synchronized关键字构建的代码块锁Synchronized在静态方法上Synchronized在实例方法上锁存在的位置原创 2020-02-26 16:33:03 · 111 阅读 · 0 评论