自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Docker-快速入门

确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL:💡mysql当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub。Docker是做什么的?什么是镜像?什么是容器?什么是镜像仓库?

2024-06-20 21:14:37 134

原创 使用ThreadLocal

对于多任务,Java标准库提供的线程池可以方便地执行这些任务,同时复用线程。这种在一个线程中,横跨若干方法调用,需要传递的对象,我们通常称之为上下文(Context),它是一种状态,可以是用户身份、任务信息等。给每个方法增加一个context参数非常麻烦,而且有些时候,如果调用链有无法修改源码的第三方库,方法,它内部需要调用若干其他方法,同时,我们遇到一个问题:如何在一个线程内传递状态?没有被清除,该线程执行其他代码时,会把上一次的状态带进去。注意到普通的方法调用一定是同一个线程执行的,所以,

2024-06-20 15:40:48 126

原创 使用Atomic

Atomic类是通过无锁(lock-free)的方式实现的线程安全(thread-safe)访问。它的主要原理是利用了CAS:Compare and Set。包除了提供底层锁、并发集合外,还提供了一组原子操作的封装类,它们位于。在高度竞争的情况下,还可以使用Java 8提供的。这样的封装好的方法,因此,使用起来非常简单。CAS是指,在这个操作中,如果。通常情况下,我们并不需要直接用。的值,最终的结果也是正确的。实现复杂的并发操作,而是用。循环,即使其他线程修改了。,就什么也不干,返回。

2024-06-20 11:18:44 341

原创 使用Concurrent集合

因为所有的同步和加锁的逻辑都在集合内部实现,对外部调用者来说,只需要正常按接口引用,其他代码和原来的非线程安全代码完全一样。方法时,该方法内部可能会让线程变成等待状态,直到队列条件满足不为空,线程被唤醒后,非常有用,所以我们不必自己编写,可以直接使用Java标准库的。使用这些并发集合与使用非线程安全的集合类完全相同。但是它实际上是用一个包装类包装了非线程安全的。包也提供了对应的并发集合类。加锁,这样获得的线程安全集合的性能比。的意思就是说,当一个线程调用这个。集合要低很多,所以不推荐使用。

2024-06-20 11:14:38 178

原创 乐观锁StampedLock

显然乐观锁的并发效率更高,但一旦有小概率的写入导致读取的数据不一致,需要能检测出来,再读一遍就行。还提供了更复杂的将悲观读锁升级为写锁的功能,它主要使用在if-then-update的场景:即先读,如果读的数据满足条件,就返回,如果读的数据不满足条件,再尝试写。这样一来,我们读的数据就可能不一致,所以,需要一点额外的代码来判断读的过程中是否有写入,这种读锁是一种乐观锁。,会发现它有个潜在的问题:如果有线程正在读,写线程需要等待读线程释放锁后才能获取写锁,即读的过程中不允许写,这是一种悲观的读锁。

2024-06-19 22:47:08 369

原创 使用ReadWriteLock

读写锁的使用

2024-06-19 22:42:05 159

原创 线程同步和解决死锁

当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行。这个时候,有个单线程模型下不存在的问题就来了:如果多个线程同时读写共享变量,会出现数据不一致的问题。上面的代码很简单,两个线程同时对一个int变量进行操作,一个加10000次,一个减10000次,最后结果应该是0,但是,每次运行,结果实际上都是不一样的。这是因为对变量进行读取和写入时,结果要正确,必须保证是原子操作。原子操作是指不能被中断的一个或一系列操作。

2024-06-19 13:15:40 369

原创 线程的状态,中断及守护线程

在Java程序中,一个线程对象只能调用一次start()方法启动新线程,并在新线程中执行run()方法。一旦run()方法执行完毕,线程就结束了。run()sleep()run()用一个状态转移图表示如下:当线程启动后,它可以在RunnableBlockedWaiting和这几个状态之间切换,直到最后变成Terminated状态,线程终止。run()returnrun()Threadstop()一个线程还可以等待另一个线程直到其运行结束。例如,main线程在启动t线程后,可以通过t.join()等待t。

2024-06-18 20:25:32 647

原创 java多线程

在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程。某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼写检查,同时还可以在后台进行打印,我们把子任务称为线程。进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个线程。操作系统调度的最小任务单位其实不是进程,而是线程。

2024-06-18 18:37:56 465

原创 Redis项目实战——黑马点评(优惠卷秒杀部分)

redis实战-黑马点评的优惠券秒杀部分

2024-06-17 22:41:15 1061

原创 Redis项目实战——黑马点评(商户查询缓存部分)

Cache),就是数据交换的。

2024-06-16 23:49:47 780

原创 Redis项目实战——黑马点评

redis项目实战——黑马点评

2024-06-16 11:00:53 972

原创 Redis基础知识

了解redis是什么及基本使用

2024-06-15 16:27:18 789 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除