Java高级技术
Heaven-Wang
坐标:浙江杭州 联系我:490095337@qq.com
展开
-
【Java并发之】BlockingQueue
本文主要讲的是并发包中涉及到的集合,关于普通集合,请参考【java 集合概览】一、什么是BlockingQueueBlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种:1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另原创 2015-10-23 11:50:31 · 35509 阅读 · 3 评论 -
全面理解Java内存模型
Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Jav原创 2016-09-21 18:39:21 · 198766 阅读 · 94 评论 -
java 并发编程
线程的概念关于线程安全 java thread中的wait()和notify()java synchronizedJava 线程池Java线程池相关类Java 并发包之BlockingQueue本列表会不断更新原创 2015-11-03 18:24:31 · 1933 阅读 · 0 评论 -
什么是线程安全
线程安全是多线程领域的问题,线程安全可以简单理解为一个方法或者一个实例可以在多线程环境中使用而不会出现问题。产生线程不安全的原因在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的原创 2016-08-09 17:20:06 · 31741 阅读 · 3 评论 -
线程之间的通信(thread signal)
线程通信的目的是为了能够让线程之间相互发送信号。另外,线程通信还能够使得线程等待其它线程的信号,比如,线程B可以等待线程A的信号,这个信号可以是线程A已经处理完成的信号。通过共享对象通信有一个简单的实现线程之间通信的方式,就是在共享对象的变量中设置信号值。比如线程A在一个同步块中设置一个成员变量hasDataToProcess值为true,而线程B同样在一个同步块中读取这个成员变量。下面例子演示了一原创 2016-07-08 17:57:04 · 21554 阅读 · 2 评论 -
java thread中的wait()和notify()
关于线程的状态java thread有五种状态类型新建状态(New):新创建了一个线程对象。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻塞状态(Blocked):塞状态是线程因为某种原因放弃CPU使用权,暂时停原创 2016-07-07 16:46:21 · 5564 阅读 · 1 评论 -
Java Lambda 表达式介绍
Lambda 表达式是 Java SE8 推出的新功能,也是Java第一次引入函数式编程的尝试。Lambda表达式格式Lambda 表达式可以看做是一种匿名函数,但是它没有访问修饰符、返回值和名字。Lambda表达式由两部分构成,形式参数和方法体,中间用“->”符号分隔。其中的形式参数类型能够进行自动推断,可以不写。当然在某些特殊情况下,形参类型也是不可缺少的。方法体可以是简单的表达式或者代码块,下原创 2016-07-04 16:09:40 · 1205 阅读 · 0 评论 -
Java 注解详解 (annotation)
什么是java注解注解是java5的新特性。注解可以看做一种注释或者元数据(MetaData),可以把它插入到我们的java代码中,用来描述我们的java类,从而影响java类的行为。Java注解的目的使用Java注解一般来说主要有三种目的构建时指示: RetentionPolicy.SOURCE编译期指示: RetentionPolicy.CLASS运行时指示: RetentionPolic原创 2016-07-01 14:55:45 · 8925 阅读 · 1 评论 -
Java RMI 介绍
一、Java RMI 概览Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。所以,RMI相关对象必须运行在Java虚拟机中。在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务原创 2016-06-24 10:36:45 · 1695 阅读 · 0 评论 -
Java线程池 ExecutorService
本篇主要涉及到的是java.util.concurrent包中的ExecutorService。ExecutorService就是Java中对线程池的实现。一、ExecutorService介绍ExecutorService是Java中对线程池定义的一个接口,它java.util.concurrent包中,在这个接口中定义了和后台任务执行相关的方法: Java API对ExecutorServ原创 2015-10-27 09:33:19 · 110418 阅读 · 21 评论 -
Java线程池类ThreadPoolExecutor、ScheduledThreadPoolExecutor及Executors工厂类
Java中的线程池类有两个,分别是:ThreadPoolExecutor和ScheduledThreadPoolExecutor,这两个类都继承自ExecutorService。利用这两个类,可以创建各种不同的Java线程池,为了方便我们创建线程池,Java API提供了Executors工厂类来帮助我们创建各种各样的线程池。下面我们分别介绍一下这三个类。Java线程池ExecutorService原创 2015-10-27 10:02:48 · 18773 阅读 · 0 评论 -
FTPClient连接池的实现
最近在写一个FTP上传工具,用到了Apache的FTPClient,为了提高上传效率,我采用了多线程的方式,但是每个线程频繁的创建和销毁FTPClient对象势必会造成不必要的开销,因此,此处最好使用一个FTPClient连接池。仔细翻了一下Apache的api,发现它并没有一个FTPClientPool的实现,所以,不得不自己写一个FTPClientPool。下面就大体介绍一下开发连接池的整个过程原创 2015-10-08 10:59:51 · 32886 阅读 · 18 评论 -
volatile和synchronized的区别
volatile和synchronized特点首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制的目的是控制代码执行(顺序)及是否可以并发执行。内存可见控制的是线程执行结果在内存中对其它线程的可见性。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized关键字解决的是执行控制的问题,它会阻止其它原创 2016-09-21 18:16:55 · 66013 阅读 · 23 评论