![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC
文章平均质量分 78
并发编程
GuochaoHN
Take nothing for granted. Know that the harder you work, the luckier you'll get.
展开
-
守护线程及应用场景
守护线程原创 2022-07-15 20:56:52 · 1838 阅读 · 0 评论 -
JUC——线程池(底层原理、手写线程池)
目录为什么要使用线程池为什么要使用线程池工作原理:(控制运行的线程数量)处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大执行数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。线程池的优势(为什么要使用线程池):1.降低资源消耗。通过重复利用已经创建的线程降低线程创建和销毁所造成的的消耗。(线程复用)2.提高响应速度。当任务到达时,任务可以不需要等待线程创建就能够立即执行。3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗原创 2021-08-19 12:29:19 · 294 阅读 · 0 评论 -
JUC——读写锁
目录读写锁介绍ReentrantReadWriteLockCOW和读写锁对比读写锁介绍读锁又叫共享锁,可以允许多个线程读数据;写锁又叫做独占锁,只能允许一个线程进行写操作。读锁和写锁都可能引起死锁现象:所以为避免死锁现象,对相应数据上什么锁,就只对相应数据做什么操作。ReentrantReadWriteLock读锁在同一时刻可以允许多个读线程获取,即允许多个读线程同时上锁读取数据,不允许写线程获取操作。(上多个读锁:允许多个读线程,不允许写线程)写锁同一时刻只能有一个写线程获取成功,其他都原创 2022-02-11 12:47:22 · 890 阅读 · 0 评论 -
JUC——辅助类
目录CountDownLatchCyclicBarrierSemaphoreCountDownLatch减少计数器public class CountDownLatchDemo{ public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6); for (int i =原创 2022-02-11 11:03:41 · 131 阅读 · 0 评论 -
JUC——线程不安全:并发修改异常(集合的不安全)
目录引入解决方案其他线程安全实现类JUC实现类写时拷贝技术引入当多线程并发对集合进行操作的时候,会造成并发修改异常示例:List<String> list = new ArrayList<>();for (int i = 0; i <30 ; i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,8));原创 2022-02-10 21:00:09 · 579 阅读 · 0 评论 -
JUC——Callable接口
目录Callable接口原理Callable接口未来的任务,用它就干一件事,异步调用。Callable接口介绍:(1)java.util.concurrent.Callable是一个泛型接口,只有一个call()方法(2)call()方法抛出异常Exception异常,且返回一个指定的泛型类对象使用Callable接口实现多线程的步骤(1)第一步:创建Callable子类的实例化对象(2)第二步:创建FutureTask对象,并将Callable对象传入FutureTask的构造方法中(注原创 2022-02-10 23:42:13 · 425 阅读 · 0 评论 -
JUC——Lock接口
目录Lock是什么Lock是什么原创 2021-10-30 17:04:15 · 126 阅读 · 0 评论 -
Java多线程——线程间通信:生产者与消费者(wait(),notify())
目录死锁死锁两个线程,互相占有对方想要的锁,不放手。线程一:class A extends Thread{ private Object lockA; private Object lockB; public void run(){ synchronized (lockB) { System.out.println("获得lockB"); synchronized (lockA) { System.out.println("获得lockA"); } } }原创 2021-08-12 23:15:42 · 523 阅读 · 0 评论 -
多线程锁synchronized多种测试案例
1、标准访问,先打印短信还是邮件class Phone { public synchronized void sendSMS() throws Exception { //TimeUnit.SECONDS.sleep(4); //即使是当前线程sleep4秒,其他线程也无法调用此类中的所有synchronized方法,因为锁就是当前调用此方法的对象,且并没有释放。 System.out.println("------sendSMS"); }原创 2022-02-10 22:08:18 · 827 阅读 · 0 评论 -
Java多线程——线程安全问题:synchronized关键字
目录问题引入:解决方法:加锁形式一:同步代码块形式二:同步方法问题引入:线程数安全问题引入:当多个线程使用“共享数据”时,就会有线程安全问题。当一个线程修改了“共享数据”,是会影响其他线程。以卖票为例:有10张票,分三个窗口同时卖示例:public class test { public static void main(String[] args) { Ticket t1 = new Ticket("窗口一"); Ticket t2 = new Ticket("窗口二");原创 2021-08-12 02:03:30 · 168 阅读 · 0 评论 -
Java多线程——Thread类和Runnable接口
程序、进程、线程基本概念:程序:程序是以某些程序设计语言(机器语言、汇编语言、高级语言c、java等)编写的指令集。(静态)进程:进程是正在运行的程序的实例(一段程序的执行过程)(动态,有周期)一个程序可以对应多个进程,但一个进程只能对应一个程序。操作系统—执行—>(程序指令集+根据指令需求分配的系统资源)线程:线程被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流操作系统—运行调度—>(进程中的部分指令+进程分配的资源)并发、并行并发:指原创 2021-07-27 20:04:58 · 322 阅读 · 0 评论 -
(进程/线程)阻塞、挂起、睡眠的区别
目录共同本质:阻塞:(被动)挂起(主动)睡眠(主动)共同本质:正在执行的进程/线程,由于某些原因(主、被动)释放CPU,暂停执行(这里讨论的均是处于运行状态的进/线程) 阻塞:(被动)进/线程被动暂停执行,阻塞的进程仍处于内存中,OS把处理机分配给另一个就绪进程,而让被暂停的进程处于暂停状态。(自动)阻塞恢复:需要在等待的资源得到满足(例如获得了锁)后,才会进入就绪状态,等待被调度而执行。阻塞原因:进程:进程由于提出系统服务请求(如I/O操作),但因为某种原因未得到操作系统的立原创 2021-07-30 12:38:03 · 3360 阅读 · 0 评论 -
程序、进程、线程、并发、并行
目录程序:进程:线程:并发:并行:基本概念:程序:程序是以某些程序设计语言(机器语言、汇编语言、高级语言c、java等)编写的指令集。(静态)进程:进程是正在运行的程序的实例(一段程序的执行过程)(动态,有周期) 每个进程之间是独立。操作系统在分配资源(例如:内存)时,是以进程为单位。 两个进程之间进行切换,通信(交换数据)等操作时原创 2021-10-29 19:04:28 · 266 阅读 · 0 评论 -
Java实现飞机大战(详细思路与过程,含源代码)
目录演示构思演示 飞机大战 构思首先,要把整体的游戏框架和内容构思出来(根据预先构思游戏里存在的组件内容的游戏功能抽象出指定类)。以我的小游戏为例:1.主界面框架类:GameFrame(extends JFrame) 显示开始界面2.弹出界面类:Dialog (extends JDialog)&n原创 2021-08-07 12:36:20 · 20444 阅读 · 6 评论