自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

夜冬的博客

巩固自己所总结的知识点

  • 博客(30)
  • 收藏
  • 关注

原创 SpringBooot框架 ServlerConxtextListener的方法实现和注解实现的区别

废话不说,直接码上:import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;import org.springframework.boot.web.servlet.ServletListene

2020-05-09 17:25:10 154

原创 Fork/Join框架 任务的运行方式以及示例

Fork /Join框架提供了一种更为有效的任务管理方式,当ForkJoinPool执行ForkJoinTask任务时可以采用同步或者异步的运行方式。 当采用同步运行方式时,把任务交给ForkJoinPool处理后不会立即返回,而是等待任务全部结束才能返回继续执行;采用异步的运行方式时,吧3任务发送到ForkJoinPool后会立马返回并继续执行。 采用不同的运行方...

2020-01-06 16:47:54 414

原创 Fork/Join 框架的基础以及示例

Fork/Join 框架主要由Fork 和 Join 两个操作构成: 1)Fork操作主要用于对任务和数据进行划分,一般是将一个大问题划分为几个小问题,以期望能够方便地对简化后地问题进行处理 2)Join操作主要作用于对各个部分地运行结果进行合并,相当于程序中的一个障栅。 这两个操作与MapReduce中的Map/Reduce操作类似,简而言之,Fo...

2020-01-02 18:52:16 247

原创 RejectedExceptionHandler 管理被拒绝的任务

可以通过方法shutdown()关闭执行器,在调用该方法后,执行器将等待那些正在运行或正在等待的任务完成,然后才能真正的关闭执行器,关闭后的执行器将不再接收新的任务。由于关闭执行器有一定的时间延迟,很可能 在提交了关闭申请但还没有真正关闭执行器之前,新的任务被提交该执行器,对于这样的任务,可以通过接口RejectedExecutionHandler来处理。 ...

2019-12-31 14:27:24 640

原创 CompletionService 任务的装载和结果处理的分离

当使用Executor处理并发任务时,通常会把Callable对象提交给Executor处理,再通过类FutureTask的get()方法获得结果,如果当前结果还没计算出来,线程将会阻塞在此处等待, 即使后面结果出来了,也不能去处理,很显然这会导致性能的下降。 CompletionService 接口整合了Executor和阻塞队列的功能,定义如下:...

2019-12-26 17:41:28 194

原创 ScheduledExecutorService 接口

newScheduledThreadPool() 或者newSingleThreadScheduled-Executor()方法:延迟执行、周期性执行的执行器 如果想在某一段时间之后执行线程操作,或者周期性地重复执行线程操作,则可以使用工厂类Executors的newScheduledThreadPool()方法或者 newSingleThreadSche...

2019-12-25 14:01:07 351

原创 Executors 使用线程执行器处理有返回值的线程 处理Callable的实现类

有返回值的线程定义需继承Callable接口,然后将线程交给执行器,提交线程需要使用submit()方法。demo 示例: 使用线程执行器处理有返回值的线程 某驾校有4辆考试车,有8个学生要进行考试,要求分别获取学生考试的时间。 //学生考试线程类 public class Student implements...

2019-12-20 14:14:16 215

原创 Executor接口以及扩展 线程的执行器

线程池机制分离了任务的创建和执行。使用线程池执行器,仅需实现Runnable对象,并将该对象交给执行器。执行器会使用线程池中的线程执行,避免额外的创建线程的开销。 线程池执行器起到了维护和管理线程的作用,从而将程序员从繁重的线程管理任务中解放出来。 从JDK1.5开始,Java并发库中引入了Executor框架。该框架包括接口Executor及其接口ExcutorService,以...

2019-12-19 17:45:39 174 1

原创 Phaser 线程的阶段化处理

在日常生活中。我们做一件事情的时候,习惯把一件事情分为若干个阶段,然后规定每个阶段的任务和完成时间,从而实现阶段化的控制和管理,阶段化处理往往在完成某一项复杂工作时效率很高。 从JDK1.7版本开始引入类Phaser,它是Java并发库功能强大并且较复杂的一个功能,可以用来完成阶段式的并发执行任务的功能。 Phaser类直接从Object类继承,它是一个可复用的同步障栅,与Cycl...

2019-12-18 17:35:54 284

原创 Exchanger(线程间的数据交换)交换器

从JDK1.5版本开始开始提供线程间数据交换的功能,该功能可以通过Exchanger类完成。 Exchanger 类 定义: public class Exchanger<V> extends Object 参数V 表示要交换的数据类型。 该类从Object类继承,它提供了一个同步点,在该同步点上线程可以交换数据,一个线程通过exchange()...

2019-12-17 17:02:18 198

原创 SynchronousQueue 同步队列

同步队列是一个没有一个数据缓冲的阻塞队列,在同步队列上的插入操作必须等待相应的删除执行完成才能执行,反之亦然。 不能调用peek方法来查看队列中是否有数据元素,也不允许对整个队列进行迭代遍历。 类 SynchronousQueue 是java集合框架中的一员,该类的定义的形式如下。 public class SynchronousQueue<E> exte...

2019-12-16 17:17:17 179

原创 Semaphore 信号量的简单应用

信号量机制通常用于限制对某种资源的同时访问的线程数量。信号量机制是一中典型的同步机制,可以用于解决常用的线程同步问题。 在java并发库中,类Semaphore可以实现信号量机制。定义如下 public class Semaphore extends Object implements Serializable 一个信号量管理一个许可集合,可以通过方法acquire...

2019-12-11 17:38:04 123

原创 CountDownLatch类 多线程之倒计时门闩

倒计时门闩就像一个带计数开关的门,只有在门前等待的线程数量达到一定的数量时,门闩才会打开,线程才可以继续执行。 实现类: CountDownLatch,该类从Object继承而来,可以通过一个给定的值进行初始化,通常在同步状态中保存的是当前的计数值,线程的调用await()方法等待,方法countDown()会导致计数值递减,当计数值为零时,所有在倒计时门闩范围内等 ...

2019-12-11 15:56:15 242 1

原创 CyclicBarrier类-线程同步障栅的使用和示例

障栅相当于程序中的一个集合点,当结果在中间步骤需要整合的时候会经常用到,当线程需要等待其他线程时,可以让该线程运行到障栅处,一旦所有线程都到达了这个障栅,障栅就撤销,线程可以继续向下运行。 障栅 Cyclicbarrier 类是一个同步辅助类,实现了一个称为障栅的集合点,在不是所有的线程到达集合点前,线程之间可以相互等待。Cyclic的含义是"循环的、周期的",代表该障栅在所有...

2019-11-01 18:07:12 525 2

原创 Condition接口的用法和示例

条件变量:线程进入临界区域后,往往需要等待满足某个条件才能继续执行。例如,消费者需要等待缓冲区有产品后才能消费,用户只有在银行账户上有金额的时候能能取款等。 在JDK1.5之前,主要用wait()、notify()和notifyAll()方法执行条件操作中的等待和唤醒机制,JDK1.5之后版本开始,引入了条件变量(Condition Variables)。条件变量也被称为条件队列(...

2019-11-01 15:21:54 669

原创 实现有多个缓冲区的生产和消费问题

Demo示例: 模拟实现有多个缓冲区的生产和消费问题。 分析:多缓冲区时是指在生产者和消费者之间有多个缓冲区,为了方便管理,缓冲区被安排为头尾相接的模式, 定义操作对象的属性,goods表示缓冲区,为多缓冲区则定义为集合或数组,front为缓冲区的头指针,rear为缓冲区的尾指针,count则为缓冲区存放的个数,nbuf则为缓冲区的大小。 front = (front+1)...

2019-11-01 11:13:32 969

原创 notify()方法、notifyAll()方法和wait()方法 详解

线程作为程序内部的多个执行流,相互之间是可以通讯的。线程间通讯可以通过多种方式来进行,例如:线程间可以共享变量来进行通讯,使每个线程根据共享变量的值进行操作和运算,当通过共享变量进行通讯时,通常需要引入同步控制, 线程间也可以通过 wati()、notify()和notifyAll()等方法进行通讯。 每一个类的对象的实例都有一个等待集合,当在该实例上调用wait()方法后,线程都...

2019-10-31 17:07:23 4924

原创 原子操作数组类AtomicIntegerArray

基本数据定义数组 :int [] intArray= new int[100]; 原子类型定义数组: AtomicInteger [] aiArray= new AtomicIntegre[100]; 两者所定义的形式并未不同,知识类型不同而已。 JDK中提供了操作原子数组的类:AtomicIntegerArray 该类的定义如下: AtomicIn...

2019-10-31 12:52:14 706

原创 AtomicStampedReference类

AtomicStampedReference 类维护了一个对象的引用reference 和一个整型值stamp,这两个值可以原子性地进行更新。 AtomicStampedRederence 类的定义: public class AtomicStampedReference<V> extends Object 构造方法如下: AtomicStam...

2019-10-31 11:11:06 345

原创 扩展的原子引用类型:AtomicMarkableReference

AtomicMarkableReference类是一个线程安全的类,该类封装了一个对象的引用reference和一个布尔值mark,可以原子性地对这两个值进行更新。 定义: public class AtomicMarkableReference<V> exntends Object 其中,V为需要标记的原子操作的类型。 该类的构造方法如下:...

2019-10-30 14:19:11 2651 1

原创 一般类型AtomicInteger类和引用类型AtomicReference<V>

CAS (compare and swap ) 操作是最基本的原子操作之一,现在几乎所有的cpu都支持CAS操作。 int compare_and_swap( Mem m,int oldval, newval){ int old_reg_val = m; if(old_reg_val==oldval){ m= newval; ...

2019-10-29 16:40:06 1601

原创 死锁和活锁以及各种锁机制的比较

synchroniezd 同步锁时一种互拆锁。主要通过同步方法或者同步块的形式来使用同步锁。 同步锁的优点是形式简单,易于理解和使用。但是同步锁依赖于隐藏在对象后的内置监视器,比较抽象,不怎么直观。 ReetrantLock和ReentrantReadWriteLock 可重入锁和读写锁。 可重入锁是一中互斥锁,它和同步锁具有相同的基本行为和语义,但是在同步锁在同步锁...

2019-10-29 13:18:55 716

原创 JDK1.8 邮戳锁(StampedLock)知识点整理以及示例

邮戳锁时JDK1.8版本后引入的一种锁机制,与ReentrantRead-WriteLock类似,该锁可以用于控制读写访问。 public class StampeLock extends Object implements Serializable 邮戳锁的状态由版本号和模式两个部分组成,通过三种模式控制读、写操作,这三种模式分别如下: 1)写模式。如果线程调用write...

2019-10-28 17:45:28 944

原创 ReentrantLock 的公平性的测试

可重入锁是一种无阻塞的同步机制, java.util.concurrent.locks包下 public class ReentrantLock extends Object implements Lock,Serializable 和同步锁具有相同的语义和行为,但扩展了许多功能 如:获取该锁时的公平性设置,测试锁,测试锁是否被持有,锁的获取顺序等。‘ 1)Reen...

2019-10-25 16:09:11 115

原创 线程的分类:用户线程和守护线程

守护线程和其他的线程没什么特别的不同,它的不同之处就是守护线程是为用户线程服务的,且优先级比较低。在java中当应用只剩下守护线程时,虚拟机就会退出,者主要因为守护线程没有的服务的线程了,自己运行也没有什么必要了。将一般线程变成守护的方法是setDaemon()。例如:Thread thread = new Tread();thread.serDaemon(true);th...

2019-10-25 15:06:14 249

原创 ReentrantLock 可重入锁

可重入锁是一种无阻塞的同步机制, java.util.concurrent.locks包下 public class ReentrantLock extends Object implements Lock,Serializable 和同步锁具有相同的语义和行为,但扩展了许多功能 如:获取该锁时的公平性设置,测试锁,测试锁是否被持有,锁的获取顺序等。 1)Reen...

2019-10-24 18:25:13 48

原创 Callable 和 Runnable的区别

1)Callable是有返回值的,而Runnable是没有返回值的。2)Callable执行入口的方法是call(),Runnable执行方法的入口是run();3)call()方法可以抛出异常,run()方法不可以4)运行Callable相当于启动一个异步的计算,将来再通过Fature得到运算结果,而且可以使用Fature中的cancel方法取消方法的执行。Runnable由于没有返...

2019-10-24 15:41:08 393

原创 线程本地化的变量ThreadLocal

ThreadLacal类是实现线程的本地化的对象 使用此类ThreadLocal将会使变量在每个线程的私有区域内有一个副本,每个线程都可以相对独立地改变自己的副本,而不影响其他线程的副本。总的来理解的话就是ThreadLocal这个类表示的不是线程,而是表示线程的一个变量。ThreadLocal类提供了方法set()和get()用于设置和获取线程的本地值。一个线程首次获取一个线程的本地对...

2019-10-23 17:07:10 213

原创 JMS是实现中间件RabbitMQ

所需要的的依赖jar包<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version></version></dependency>示例...

2019-10-16 17:13:49 1552

原创 jsp和json的三级联动 servlet没上传

&lt;%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body style="font-size: 30px;" onload="getProvinceFun()"&gt;

2018-05-10 20:14:20 145

空空如也

空空如也

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

TA关注的人

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