Synchronized和Lock对比

synchronized和lock是Java中提供的两种常用的锁机制,两者对比如下:

  1. 使用方法上
    • synchronize,是Java提供的一个关键字,可以加在方法上,也可以加在特定代码块中
    • lock,是Java提供的一个借口,常用的有ReentrantLock,通过调用lock()和unlock()获取锁和释放锁。通常在finally中添加unlock()防止死锁。
  2. 性能上
    • synchronized,JDK1.5中,synchronized是非常重量级的操作,但是从1.6开始,进行了优化,引入了锁升级机制,性能得到了较大提升。
    • lock,是乐观锁,通过CAS实现,在资源竞争激烈的情况下,使用lock性能会更好。
  3. 支持的功能上
    • synchronized,支持的功能简单,是公平锁,不支持中断
    • lock,支持更多的功能,包括公平、非公平锁,trylock、读写锁、condition等。
阅读更多...

Java中的Future

Future相关概念

定义

官放时这样描述Future接口的:

Future represents the result of an asynchronous computation. Methods are provided to check if the computation is complete, to wait for its completion, and to retrieve the result of the computation. The result can only be retrieved using method get when the computation has completed, blocking if necessary until it is ready. Cancellation is performed by the cancel method. Additional methods are provided to determine if the task completed normally or was cancelled. Once a computation has completed, the computation cannot be cancelled. If you would like to use a Future for the sake of cancellability but not provide a usable result, you can declare types of the form Future<?> and return null as a result of the underlying task.

阅读更多...

线程池拒绝策略及应用场景

文章转自这里

1 前言

谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。

ThreadPoolExecutor是一个典型的缓存池化设计的产物,因为池子有大小,当池子体积不够承载时,就涉及到拒绝策略。JDK中已经预设了4种线程池拒绝策略,下面结合场景详细聊聊这些策略的使用场景,以及我们还能扩展哪些拒绝策略。

阅读更多...

Redis单线程模型

我们常说Redis是单线程的,所有操作都是按照顺序线性执行,但是由于读写操作等待用户输入或输出都是阻塞的,因此IO操作在一般情况下不能直接返回,这会导致:某一文件的IO阻塞会使得整个进程无法对其他客户提供服务。因此Redis在新版本中引入了多路复用功能。

阅读更多...

短链设计方案总结

为什么用短链

所谓“短链”,就是短的链接。短链设计,就是设计一种方案,将原本很长的一串链接转换成一个非常短的链接。当用户访问这个短连接时,会自动跳转到真实链接对应的网页。

那么使用短链有什么好处呢?

  1. 链接变短,有时候我们要限制内容长度,使用长链接的话会占用过多字数,导致可编辑文字变少。

    • 比如,微博平台,限定只能发140个字,如果使用长链接,可能直接占用了50个字,那相当于只能编写90个字
    • 再比如,短信发文有长度限制,如果使用长链接,一条短信可能要拆分成好几条,不仅体验极差,还要花更多的钱
  2. 二维码,我们经常需要将连接转成二维码的形式分享给他人,如果使用长链的话,生成的二维码十分密集难以识别,短链就不存在这个问题。

  3. 无法识别,链接太长,有些平台无法自动识别为超链接,只能识别其中一部分。

阅读更多...
  • Copyrights © 2021-2022 Yin Peng
  • 引擎: Hexo   |  主题:修改自 Ayer
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信