自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 阿里云CentOS 7下配置及使用mysql

一、安装1 正确的安装方法:众所周知,Linux系统自带的repo是不会自动更新每个软件的最新版本(基本都是比较靠后的稳定版),所以无法通过yum方式安装MySQL的高级版本。所以我们需要先安装带有当前可用的mysql5系列社区版资源的rpm包。 1 2 #######安装rpm包 [root@typecodes ~]# rpm -Uvh h...

2018-09-26 10:52:21 224

转载 线程二十二:读写锁

读写锁也是一种在日常开发中使用较多的锁,它主要应用在读比较多而写比较少的情况下。举个例子,比如网络上的词条大家通常都是在读,但是也有需要修改的时候,比如版本的升级,提升词条解释的完善性等方面。这种情况下需要一种能够提供读取数据的高并发效率锁,同时在写的时候能保证安全的互斥访问,这个时候需要使用ReadWriteLock接口。ReadWriteLock接口维护了一对锁,一个是针对读操作的锁,一个...

2018-09-25 22:03:56 88

转载 线程二十一:条件

条件Condition接口可以简单的理解为是wait和notify的升级版,通过与Lock的使用结合起来,能完成在对象上创建多重等待集合的功能。使用Lock的newCondition方法可以获取一个针对特定Lock实例的Condition对象。Condition声明了如下的重要方法来实现其功能:1.await方法在接收到唤醒信号之前会一直等待(可以被中断)。2.await(long time,...

2018-09-25 21:45:38 109

转载 线程二十:ReentrantLock

java.util.concurrent.locks包定义了一系列关于锁应用的类和接口,与前面文章中提到的对象内置加锁及等待-通知相比,它更加的灵活,可以说是一种改良方案。接口Lock定义了锁机制的框架结构,它声明了如下重要的方法:1.lock方法来获取锁,当锁不可用时,调用线程会持续等待锁。2.lockInterruptibly方法获取锁,除非调用的线程被中断。3.unlock方法释放锁,这...

2018-09-25 20:58:25 87

转载 线程十九:Phaser

Phaser构建了一个更加灵活的同步屏障,和前面文章中提到的CountDownLatch与CyclicBarrier屏障器一样,Phaser也能使得一组线程在屏障上等待,在最后一条线程到达之后,这些线程就能继续执行了。Phaser的灵活在于它可以协调不定数目的线程,线程可以在任何时刻加入。为了达到灵活性的目的,Phaser定义了表达状态的phase值,phase的初始值是0,当线程都到达指定的...

2018-09-25 19:53:15 155

转载 线程十八:Semaphore

Semaphore在java线程控制中通常被用作资源的限制访问数量,如果我们想让某个资源同时只能有一定数量的线程访问,那么我们就可以使用Semaphore来进行限制了。Semaphore将限制数量概念化成一个维护一组许可证的对象,我们可以通过构造器Semaphore(int permits)来初始化一个Semaphore对象,其中permits指定了许可证的数量。许可证还存在一个公平策略的问题...

2018-09-25 18:13:22 124

原创 线程十七:Exchanger

我们通常把Exchanger称为"交换器",它提供了线程之间交换对象的同步点。"交换器"Exchanger提供了exchange方法来完成线程之间对象的交换,线程会向exchange方法传递对象同时接收其它线程的返回对象。Exchanger位于java.util.concurrent包下,我们可以通过一个无参的构造器完成它的对象创建。Exchanger提供了两个方法来完成对象的交换,分别是:1...

2018-09-25 17:49:34 170

原创 jQuery jsPdf 导出pdf

1、头部引入js<script src="/static/js/main/jquery-3.3.1.min.js"></script><script src="/static/js/dist/html2canvas.min.js"></script><script src="/static/js/dist/jsPdf.deb

2018-09-18 14:40:46 5613

原创 jQuery qrcode生成二维码

1、头部导入js<script src="/static/js/main/jquery-3.3.1.min.js"></script><script src="/static/js/dist/jquery.qrcode.min.js"></script>2、代码实现/** * 生成二维码 * @param cla 标签class...

2018-09-18 14:37:17 218

转载 线程十六:CyclicBarrier

"同步屏障"指的是一组线程互相等待,直到到达某个公共的屏障点。"同步屏障"通常用在数量固定且在执行过程中需要等待彼此执行的多线程应用中。CyclicBarrier类实现了同步屏障,可以通过使用构造器CyclicBarrier(int parties)来创建其对象,其中的parties代表拥有共同执行目标的线程数量,也可以通过构造器CyclicBarrier(int parties,Runnab...

2018-09-16 21:03:18 179

转载 线程十五:CountDownLatch

CountDownLatch是jdk1.5之后引入的一个同步器应用类,它的作用能够使一个线程一直等待直到其他线程完成任务后再继续执行。CountDownLatch通常也被叫做门闩,意思是它会导致一条或多条线程一直在门口等待,直到一条线程打开这个门,其他线程才得以继续执行。我们可以通过构造器CountDownLatch(int count)来构造一个CountDownLatch的实例,其中cou...

2018-09-16 17:47:49 167

转载 线程十四:ExecutorService

ExecutorService不仅能调用Runnable的任务,它还提供了调用Callable任务的方法。Callable任务中的call方法能够返回任务运行的结果,同时还可以抛出受检的异常,call方法声明了一个throws Exception子句。为了描述ExecutorService的应用,我们看一个实例:例子中分别创建了Runnable和Callable两个任务对象,service...

2018-09-16 17:27:05 124

转载 线程十三:并发工具类

并发工具类是在jdk1.5提出的,可以把它理解成一个包含了很多强大且易扩展的高性能线程工具类的框架。通过前面的文章介绍,大家现在已经了解了java语言提供的底层操作一个线程的过程,有了多线程的支持使得java语言可以提供高性能的多线程解决方案。虽然java提供了底层的线程支持,但是它本身也存在一些下面的问题:1.低级别的并发原语很难正确的使用,比如如何正确的使用synchronized以及wa...

2018-09-16 16:59:40 131

转载 线程十二:定时器

定时器在线程中的应用很广泛,比如我们要在某个时间点执行一个特定的任务,或者规律性的重复执行某个任务,这个时候我们就需要使用定时器了。在java1.3版本之后我们可以使用Timer和TimerTask来构建自己的定时应用。Timer能够在一个后台线程中调度TimerTask用于后续执行,可以单次执行或者规律性的重复执行。为了描述Timer的应用,我们看一个实例:例子中创建了一个Timer...

2018-09-16 16:31:04 144

转载 线程十一:线程局部变量

有的时候我们可能需要为线程设置自己的局部变量来存储不同线程的私有数据,但是系统并没有这样的局部变量,如果采用实例属性那么必须对其进行同步。为了解决这一问题,系统为程序员提供了类ThreadLocal,它代表了线程的局部变量,它为每一个线程提供了独立的存储区域,这些线程在运行时只能看到自己的值,各个值之间也没有交叉和联系。ThreadLocal的定义被声明成ThreadLocal<T&gt...

2018-09-16 16:19:30 492

转载 线程十:线程组

Java中的线程组代表一组线程,这个线程组也可以包含另外的线程组,通常用于管理有相关任务的一组线程的集合。使用线程组对象可以对其中的所有线程对象进行整体操作,线程组的应用简化了多条线程的管理工作。线程组使用ThreadGroup来进行定义,其中可以定义Thread以及其他的ThreadGroup对象。为了演示线程组的应用,我们看一个实例:例子中我定义了两个线程,并且把这两个线程加入...

2018-09-16 14:46:41 108

转载 线程九:join和sleep

在多线程的交互过程中有这样一种情况,线程ThreadA会启动另外一个线程ThreadB,可能需要让线程ThreadB执行一些诸如计算之类的操作,此时线程ThreadA需要等待线程ThreadB执行结束,并处理线程ThreadB结束后的结果,这个时候我们就需要使用join方法了。线程类Thread提供了三种join方法,分别是join()方法、join(long millis)、join(lon...

2018-09-16 11:48:49 220

转载 线程八:中断

当程序的线程在运行过程中时需要停止它,这个时候就需要使用到线程的"中断"功能了。理解"中断"在线程开发中的应用是十分重要的,因为它涉及到线程的运行状态调整,在后续的开发中会频繁使用"中断"来控制线程的执行过程。在线程的执行过程中我们不能强制的关闭掉一个正在执行的线程,因为这样的操作是十分危险的,线程可能在没有正确释放持有锁的情况下被关闭,所以线程中的stop和suspend方法已经不推荐使用了...

2018-09-16 11:35:24 113

转载 线程七:wait和notify

wait和notify是解决线程之间交互的一个重要方案,当线程之间存在某种顺序依赖时可以使用它们。比如线程ThreadA需要等待某个条件成立,在条件成立之前会一直阻塞,后续线程ThreadB完成了这个条件,进而通知线程ThreadA可以执行了,这种情况就需要使用wait和notify了。Java系统提供了3个wait方法,简单的说wait的功能就是导致当前的线程一直等待,直到另外的线程调用了同...

2018-09-16 11:20:05 1690

原创 线程六:volatile

volatile只能解决可见性问题,不能解决互斥问题,通常程序使用它作为状态标签,看一个实例:程序中定义了停止线程的stopThread方法,以便于程序能通过此方法结束线程的运行。但是由于每个线程都有自己的变量拷贝,所以在多核处理器上运行此程序时,可能看不到线程的结束。为了解决这个问题,我们可能想到使用synchronized来同步访问stoplab属性,看下面修改:遗憾的是,这不...

2018-09-13 22:17:01 95

转载 线程五:死锁

        活锁通常指的是线程总是在持续重复执行一个失败的操作,以至于线程无法继续执行的情况。饿死通常指的是线程一直被调度器延迟访问其需要的资源,比如调度器一直执行优先级别高的线程,而总有优先级别高的线程可以执行,所以此线程就会被无限延期,这种无限延期是导致线程"饿死"的直接原因。通常我们可以使用sleep方法来避免线程被饿死,通过调用线程的sleep方法让高优先级线程给低优先级线程执行的机会...

2018-09-13 22:12:52 116

原创 线程四:同步

       同步是java虚拟机的一个重要特性,它能够保证多个并发的线程不会在同一时间执行同一块临界区(必须以串行方式访问的代码块)。由于线程对临界区的访问都是互斥地执行,所以这种同步属性通常称为互斥,线程取得的锁也称为互斥锁,互斥能够有效解决我在上一篇文章中提到的竞态条件和数据竞争问题。        同步除了能够表现互斥,也能够表现可见性。可见性能确保线程在临界区执行的时候能看到共享变量...

2018-09-13 22:08:21 97

原创 线程三:多线程的问题

1、竞态条件        当计算结果的正确性取决于相对时间或者调度器控制的多线程交叉时,就会发生竞态条件。这句话可能对初次接触线程的读者来说不太好理解,其实竞态条件有两个相对比较好理解的描述,一个是check-then-act,另外一个是read-modify-write。        check-then-act通常指的是用"过时"的状态去决定下一步的动作。比如看一个例子:if(nu...

2018-09-13 21:31:50 285

原创 线程二:线程的状态转换

java多线程的状态可以用"三池两态"来描述。"三池"即"就绪池"、"运行池"、"阻塞池",两态即"起始态"、"终止态"。当线程对象创建结束后,线程就处于"起始态",此时的线程对象已经构建结束但还没有启动。当在线程对象上调用start方法后,线程就进入了"就绪池","就绪池"中的线程随时可以运行。当线程获得

2018-09-13 21:18:43 156

原创 线程一:创建多线程

一、概念       "线程"是计算机执行任务的基本单位,通常"线程"作为"进程"的一部分,也就是说"线程"的集合是"进程"。而计算机进行任务调度的时候通常以"进程"为单位,所以说"进程"是重量级的,而"线程"则是相对的轻量级任务执行单位。二、方法1、实现Runnable接口        类TestRunnable实现了接口Ru

2018-09-13 21:13:35 156

原创 Jenkins一键部署vue项目

1、插件安装2、新建任务3、项目描述4、源码管理5、构建环境6、执行shellecho $PATHnode -vnpm -v #检查编译环境npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedrivernpm installnp...

2018-09-05 10:57:34 12475 1

原创 jenkins一键部署svn项目

一、jenkins安装与配置1、jdk和tomcat安装2、前往https://jenkins.io/download/下载war包3、将下载好的jenkins.war放进tomcat/webapps目录下,启动tomcat4、登入http://localhost:8080/jenkins,进入Jenkins初始化页面,第一次启动时间可能有点长,耐心等待。进入成功后会看到如下画...

2018-09-04 16:56:14 1464

空空如也

空空如也

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

TA关注的人

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