
Java多线程
Java多线程
绿头龙
don't think,feel it
展开
-
Java线程和操作系统线程的关系
Java线程和操作系统线程的关系原创 2020-10-18 21:19:47 · 263 阅读 · 0 评论 -
Java 线程池工作过程
之前面试被问到了没有答上来,遗憾。Java 线程池工作过程如下:线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。当调用 execute() 方法添加一个任务时,线程池会做如下判断:a) 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务;b) 如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列;c) 如果这时候队列满了,而且正在运行的线程数量小于 maximumP原创 2020-10-15 00:26:21 · 462 阅读 · 0 评论 -
两次start同一个线程会怎么样
public class ThreadDemo { public static void main(String[] args) { A a = new A(); Thread thread = new Thread(a); thread.start(); thread.start(); }}class A implements Runnable{ @Override public void run() {原创 2020-08-04 10:49:14 · 726 阅读 · 0 评论 -
深入理解CAS
什么是CASCAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。package com.qi.demo01.CAS;import ja...原创 2020-03-31 14:40:44 · 185 阅读 · 0 评论 -
Java中Volatile关键字
volatile 使用场景既然 volatile 只能保证线程操作的可见方式,那它有什么用呢?volatile 在多读多写的情况下虽然一定会有问题,但如果是一写多读的话使用 volatile 就不会有任何问题。volatile 一写多读的经典使用示例就是 CopyOnWriteArrayList,CopyOnWriteArrayList 在操作的时候会把全部数据复制出来对写操作加锁,修改完之后...原创 2020-03-31 14:37:52 · 308 阅读 · 0 评论 -
JMM(Java内存模型)
JMMJMM:java内存模型,不存在的东西,是一个概念或者约定关于JMM的一些同步约定:线程解锁前,必须把共享变量立刻刷回主存线程加锁前,必须读取主存中的最新值到工作内存中加锁和解锁是同一把锁Java内存模型分为主内存,和工作内存。每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的所有操作(读取、赋值),都必须在工作内...原创 2020-03-31 14:34:19 · 149 阅读 · 0 评论 -
异步调用
package com.qi.demo01.future;/** * @author zjq * @date 2020/3/30 13:15 */import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;import java.util.concur...原创 2020-03-31 14:28:58 · 153 阅读 · 0 评论 -
四大函数式接口
函数式接口:内部只有一个方法的接口ex:public interface Runnable { public abstract void run();}//函数式接口可以简化编程,在新版本的框架底层大量应用!forEach()就是函数式接口!四大函数式接口:Function、Predicate、Consumer、SupplierFunction源代码测试:...原创 2020-03-31 14:24:49 · 364 阅读 · 0 评论 -
循环有序打印ABCD----Semaphore
思路:通过使用信号量Semaphore,设置只有一条线程,每次执行一次释放。package com.qi.demo01.Demo;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;/** * @author zjq * @date 2020/3/27 15:21 *///循环打印...原创 2020-03-28 20:46:26 · 457 阅读 · 0 评论 -
线程池
池化技术程序的运行,本质上是占有系统的资源!所以要优化资源的使用=》池化技术**池化技术:**提前准备好一些资源,又线程来用,就拿给他,用完之后再还给线程池。线程池的好处:降低资源的消耗提高响应的速度方便管理线程复用,可以控制最大并发数,管理线程线程池 : 3大方法 7大参数,4种策略1/** * Executors 工具类、三大方法 * 使用线程池之后,用线...原创 2020-03-28 20:40:05 · 133 阅读 · 0 评论 -
SynchronousQueue 同步队列
SynchronousQueue 同步队列没有容量,进去一个元素,必须等待取出来之后,才能再往里面放入一个元素!put,take!/** * 同步队列 * 和其他的BlockingQueue不一样,SynchronousQueue,不存储元素 * put一个元素后,必须要取出这个元素才能put另一个元素。 */public class SynchronousQueueDemo { ...原创 2020-03-28 20:35:58 · 205 阅读 · 0 评论 -
阻塞队列
什么时候使用 阻塞队列? 多线程并发处理,线程池!四组API:1.抛出异常2.不抛出异常3.阻塞等待4.超时等待方式抛出异常有返回值,不抛出异常阻塞等待超时等待添加add();offer()put()offer()移除remove()poll()take()poll()检测队首元素element()peek()...原创 2020-03-28 20:34:35 · 115 阅读 · 0 评论 -
读写锁(ReadWriteLock)
package com.qi.demo01.Demo;/** * @author zjq * @date 2020/3/27 15:33 */import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks...原创 2020-03-28 20:29:01 · 166 阅读 · 0 评论 -
常用的辅助类---CountDownLatch、CyclicBarrier、Semaphore
1.CountDownLatch(减法计数器)2.CyclicBarrier(加法计数器)3.Semaphore(信号量)1.CountDownLatch(减法计数器)//计数器 //相当于一个房子内有6个人,必须等到6个人都走完才可以锁门public class CountDownLatchDemo { public static void main(String[]...原创 2020-03-28 20:27:11 · 271 阅读 · 0 评论 -
Callable
1.可以有返回值2.可以抛出异常3.方法不同,run() , call()package com.qi.demo01.UnSafe;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask...原创 2020-03-28 20:21:23 · 167 阅读 · 0 评论 -
集合类不安全——Set
Set不安全package com.qi.demo01.UnSafe;import java.util.*;import java.util.concurrent.CopyOnWriteArraySet;/** * @author zjq * @date 2020/3/25 21:04 *//** * 同理可证:ConcurrentModificationExcepti...原创 2020-03-28 20:15:21 · 192 阅读 · 0 评论 -
集合类不安全——List
List不安全import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;/** * @author zjq * @date 2020/3/25 20:32 */public class ListTest { public static void main(String[] args) { ...原创 2020-03-28 20:11:55 · 143 阅读 · 0 评论 -
如何判断锁是谁?锁到底锁的谁?
第一种: public static void main(String[] args) throws InterruptedException { Phone phone = new Phone(); //因为锁的存在 new Thread(()->{ phone.sendSms(); },"A...原创 2020-03-28 20:07:45 · 662 阅读 · 0 评论 -
Condition有序打印ABCD
编写一个程序,开启 3个线程,这 3个线程的 ID分别为 A、 B、 C,每个线程将自己的 ID在屏幕上打印 10遍,要求输出结果必须按 ABC的顺序显示;如: ABCABC….依次递推。import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.co...原创 2020-03-28 20:00:37 · 306 阅读 · 0 评论 -
Lock锁
传统的synchronizedpackage com.qi.demo01;/** * @author zjq * @date 2020/3/25 14:51 *///卖票例子/** * 线程就是一个单独的资源类,没有任何的属性和操作 */public class Demo { public static void main(String[] args) { ...原创 2020-03-26 21:40:39 · 234 阅读 · 0 评论 -
什么是JUC?
java.util.concurrent在并发编程中使用的工具类1、进程/线程是什么?进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统...原创 2020-03-26 21:39:46 · 593 阅读 · 0 评论