
并发编程
文章平均质量分 68
唐 昊
稳扎稳打,步步为营
展开
-
JUC共享模型之内存---(黑马程序员JUC笔记)
Java 内存模型原创 2022-02-26 12:13:37 · 376 阅读 · 1 评论 -
JUC之相关知识(死锁,活锁,饥饿)
死锁出现场景: 一个线程需要同时获得多把锁的时候,容易发生死锁的问题应用实例thread-1线程获取a锁,同时想要获取b锁thread-2线程获取b锁,同时想要获取a锁 public static void main(String[] args) { Object a = new Object(); Object b = new Object(); new Thread(() -> { synchroni原创 2022-02-24 16:52:26 · 448 阅读 · 0 评论 -
synchronized锁优化进阶
轻量级锁栈帧中创建锁记录对象,lock record(对象指针(object reference))解锁工作锁膨胀出现原理:00已经加了轻量级的锁了,执行methed1 要执行栈帧,里面生成新的lock Record 记录,让reference对象引用地址指向object对象、再将lock record的地址值与object的值进行交换(然而00表示轻量级锁的状态,不能成功交换了),进入锁膨胀流程进入重量级的状态然而当进行解锁的时候,由于monitor地址指向重量级的锁,不能成原创 2022-02-24 15:49:51 · 528 阅读 · 1 评论 -
创建线程的四种方式
实现方式分为四种1. 继承Threadpublic class T1 { public static void main(String[] args) { // 方式一 Test test = new Test("thread-1"); test.start(); // 方式二 new Thread(() -> { log.debug("{} is running...",Thread.curr原创 2022-02-18 22:58:21 · 832 阅读 · 0 评论 -
ReentranLock和Synchronized的区别
ReentranLockLock接口是内置属性,并非java语言内置的,该接口可以实现同步访问其中ReentranLock是Lock接口的实现类在java SE 5之后,并发包提供新增了Lock接口(以及相关实现类)用来实现锁功能但是使用时是显示地获取锁和释放锁,这一点synchronized是隐式处理的lock具备获取和释放锁的可操作性,可以中断以及超时获取锁操作使用方式 ReentrantLock reentrantLock = new ReentrantLock原创 2022-02-18 21:58:57 · 840 阅读 · 0 评论 -
Java线程池入门---(黑马程序员)笔记
保护性暂停的模式 Callable接口线程池的知识ExecutorService pool = Executors.newFiexedThreadPool(2);Future future = pool.submit( () -> {log.dubug(“running”);Thread.sleep(1000);retrun “ok”;} )原创 2022-02-18 15:55:20 · 9166 阅读 · 2 评论 -
NIO聊天室
Sever端package com.qst.one;import java.io.IOException;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.channels.Channel;import java.nio.channels.SelectableChannel;import java.nio.channels.SelectionKey;import java.nio.原创 2021-10-11 12:09:11 · 96 阅读 · 0 评论 -
IO实现客户端上传任意类型的文件数据给服务端保存起来
Client端package com.qst.file;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.F原创 2021-10-11 12:08:15 · 139 阅读 · 0 评论 -
进程和线程的相关概念
线程的基本使用:创建线程的两种方法继承Thread类,重新run方法实现Runable接口,重新run方法为何启动进程的时候用 start调用 而不是直接调用run()方法静态代理类,线程篇public class Demo5 { public static void main(String[] args) { Dog dog = new Dog(); //实现了runnable ThreadProxy porxy = new ThreadProxy(dog);.原创 2021-07-29 09:35:03 · 2168 阅读 · 0 评论