• 等级
  • 3483124 访问
  • 423 原创
  • 1 转发
  • 294 排名
  • 26 评论
  • 34 获赞

Python中文繁简体转换工具

Openccpy____________________________/__`\/\'__`\/'__`\/'_`\/'___\/'___\/\'__`\/\\/\\/\\L\\\\L\\/\__//\\/\\/\\__//\\__/\\\L\\\\_\\\\__...

2019-04-10 23:36:54

java多线程并发之旅-38-构建自定义的同步工具 Condition、AQS

导读类库中包含了许多存在状态依赖的类,例如FutureTask、Semaphore和BlockingQueue,他们的一些操作都有前提条件,例如非空,或者任务已完成等。创建状态依赖类的最简单的房就是在JDK提供了的状态依赖类基础上构造。例如第八章的ValueLactch,如果这些不满足,可以使用Java语言或者类库提供的底层机制来构造,包括内置的条件队列conditionA...

2019-04-02 15:53:48

java多线程并发之旅-37-StampedLock 读写锁中的性能之王

layout:posttitle:JCIP-37-StampedLock读写锁中的性能之王date:2019-1-1811:21:15+0800categories:[Concurrency]tags:[java,concurrency,lock,lock-free,sh]published:trueStampedLockStampedLock实现了不...

2019-04-02 15:52:56

java多线程并发之旅-36-读写锁 ReentrantReadWriteLock

ReentrantLock在Java5.0之前,只有synchronized(内置锁)和volatile.Java5.0后引入了显示锁ReentrantLock.ReentrantLock是可重入的锁,它不同于内置锁,它在每次使用都需要显示的加锁和解锁,而且提供了更高级的特性:公平锁,定时锁,有条件锁,可轮询锁,可中断锁.可以有效避免死锁的活跃性问题.ReentrantLock...

2019-04-02 15:52:01

java多线程并发之旅-35-并发程序的测试

并发程序的测试编写并发程序时候,可以采取和串行程序相同的编程方式。唯一的难点在于,并发程序存在不确定性,这种不确定性会令程序出错的地方远比串行程序多,出现的方式也没有固定规则。这对程序的应用会造成一些困难,那么如何在测试中,尽可能的暴露出这些问题,并且了解其性能瓶颈,这也是对开发者带来新的挑战。本篇基于多线程知识,梳理一些多线程测试需要掌握的方法和原则,以期望可能的在开发阶段,就暴露出并发程序...

2019-04-02 15:50:46

java多线程并发之旅-34-性能与可伸缩性

概述编写正确的程序很难,而编写正确的并发程序则难上加难。与串行程序相比,在并发程序中存在更多容易出错的地方。那么,为什么还要编写并发程序?线程是Java语言中不可或缺的重要功能,它们能使复杂的异步代码变得更简单,从而极大地简化了复杂系统的开发。此外,要想充分发挥多处理器系统的强大计算能力,最简单的方式就是使用线程。随着处理器数量的持续增长,如何高效地使用并发正变得越来越重要。线程的最主要目...

2019-04-02 15:49:52

java多线程并发之旅-33-Dead Lock-死锁

导读是什么?产生的条件?常见的场景?如何发现和分析?如何避免?总结和分析死锁是什么线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需...

2019-04-02 15:48:54

java多线程并发之旅-32-线程池的使用

线程池调优的必要性在标准的Executor实现中,当执行需求较低时将回收空闲线程,而当需求增加时将添加新的线程,并且如果从任务中抛出了未检查异常,那么将用一个新的工作者线程替代抛出异常的线程。只有当线程本地值的生命周期受限于任务的生命周期时,在线程池中的线程使用ThreadLocal才有意义,而在线程池的线程中不应该使用ThreadLocal在任务之间传递值。只有当任务都是同类型的并且相互独...

2019-04-02 15:47:06

java多线程并发之旅-31-任务的关闭与取消

java对于终止线程的考虑Java没有提供任何机制来安全地(抢占式方法)终止线程,虽然Thread.stop和suspend等方法提供了这样的机制,但是由于存在着一些严重的缺陷,因此应该避免使用。但它提供了中断Interruption机制,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。一、取消取消操作的原因用户请求取消有时间限制的操作应用程序事件错误...

2019-04-02 15:45:39

java多线程并发之旅-30-Executor 总结

jdk8以后的多线程处理集合进行并行计算有两种方式:并行流和CompletableFutures。并行流计算密集型操作,并且没有I/O,推荐使用Stream接口。因为实现简单,同时效率也可能是最高的(如果所有的线程都是计算密集型的,那就没有必要创建比处理器核数更多的线程);CompletableFutures如果并行的工作单元还涉及等待I/O的操作(包括网络连接等待),那么使用Comp...

2019-04-02 15:36:10

java多线程并发之旅-29-Executor CompletableFuture

Future的不足性能虽然Future以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,只能通过阻塞或者轮询的方式得到任务的结果。阻塞的方式显然和我们的异步编程的初衷相违背,轮询的方式又会耗费无谓的CPU资源,而且也不能及时地得到计算结果,为什么不能用观察者设计模式当计算结果完成及时通知监听者呢?多个Future结果之间的依赖性Future接口可以构建异步应...

2019-04-02 15:13:23

java多线程并发之旅-28-Executor CompletionService ExecutorCompletionService 详解

CompletionService接口定义了一系列的方法的接口。publicinterfaceCompletionService<V>{Future<V>submit(Callable<V>task);Future<V>submit(Runnabletask,Vresult);Fut...

2019-03-31 11:46:45

java多线程并发之旅-27-Executor Future FutureTask 详解

Future在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。Future模式可以这样来描述:我有一个任务,提交给了Future,Future...

2019-03-31 11:45:30

java多线程并发之旅-26-Executor ScheduledThreadPoolExecutor 定时执行类详解

Timer类的不足为什么需要ScheduledThreadPoolExecutor?在JDK1.5之前,我们关于定时/周期操作都是通过Timer来实现的。但是Timer有以下几种危险a.Timer是基于绝对时间的。容易受系统时钟的影响。b.Timer只新建了一个线程来执行所有的TimeTask。所有TimeTask可能会相关影响c.Timer不会捕获TimerTask的异...

2019-03-31 11:44:13

java多线程并发之旅-25-Timer 定时执行类详解

Timer如果我们想定时执行一个任务,应该怎么做呢?Timer就是一个Java提供的类。入门例子测试代码importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Timer;importjava.util.TimerTask;publicclassTimerTest{...

2019-03-31 11:42:24

java多线程并发之旅-24-Executor ThreadPoolExecutor 和 Executors 详解

ThreadPoolExecutor线程池相关的处理时Executor的核心。可以通过调用Executors以下静态工厂方法来创建线程池并返回一个ExecutorService对象。接口定义继承实现了AbstractExecutorService。AbstractExecutorService中定义了一系列对于publicclassThreadPoolExecutorex...

2019-03-31 11:40:33

java多线程并发之旅-23-Executor 框架, ExecutorService, AbstractExecutorService 详解

Q是什么为什么需要有什么优缺点如何使用整个技术体系为什么这么设计?如果是我,我怎么设计?为什么需要ExecutornewThread()的缺点每次newThread()耗费性能调用newThread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。不利于扩展,比如如定时执行、定期执行、线程中断...

2019-03-31 11:39:14

java多线程并发之旅-22-thread pool 手写线程池

手写线程池本文描述了线程池的核心类。从原理理解线程池线程池的作用降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。代码的实现IPool-线程...

2019-03-31 11:37:14

java多线程并发之旅-21-java Thread 源码详解

Thread示例一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。publicclassFirstThreadTestextendsThread{ //重写r...

2019-03-31 11:36:03

java多线程并发之旅-20-同步工具类。闭锁/栅栏/信号量/阻塞队列/FutureTask

同步工具类同步工具类主要包括闭锁(如CountDownLatch),栅栏(如CyclicBarrier),信号量(如Semaphore)和阻塞队列(如LinkedBlockingQueue)等;FutureTask/Future也可以达到同样的目的。使用同步工具类可以协调线程的控制流;同步工具类封装了一些状态,这些状态决定线程是继续执行还是等待,此外同步工具类还提供了修改状态的方法;下...

2019-03-31 11:34:36

叶止水

Github: https://github.com/houbb 邮箱:1060732496@qq.com
关注
  • 计算机软件
  • 中国 上海 松江区
奖章
  • 专栏达人
  • 持之以恒