Month: June 2017

JAVA: 多线程并发 CountDownLatch、CyclicBarrier和Semaphore

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 CountDownLat… Read More

JAVA: 多线程并发 CountDownLatch的介绍和使用

什么是CountDownLatch? CountDownLatch 是Java的concurrent包里面的一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器, 也就是同时只能有一个线程去减这个计数器里面的值。 关键词:计数器原子操作 一个 主要看他的构造器参数和await()方法和countdown() 方法和count()方法。 await():如果调用当前方法,当前的线程处于阻塞状态,其他线程执行完任务后调用countdown() 直到count()数减少到0  的时候,才会执行await() 以后的代码。 1、类介绍 java.util.concurrent 类 CountDownL… Read More

2017年你不能错过的Java类库

各位读者好, 这篇文章是在我看过 Andres Almiray 的一篇介绍文后,整理出来的。 因为内容非常好,我便将它整理成参考列表分享给大家, 同时附上各个库的特性简介和示例。 请欣赏! Guice Guice (发音同 ‘juice’) ,是一个 Google 开发的轻量级依赖性注入框架,适合 Java 6 以上的版本。 # Typical dependency injection public class DatabaseTransactionLogProvider implements Provider<TransactionLog> { @Inject Connection connection; public Transaction… Read More

Java(Android)线程池详解

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次new Thread新建对象性能差。 b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。 c. 缺乏更多功能,如定时… Read More

Java: set和list集合类的使用方法

集合概述 由于Set集合和List集合都继承于Collection,都用于管理多个对象,所以统称为集合类。如下图所示: 数组与集合类都可以用于管理多个对象,有何不同? 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。 集合类的特点? 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 Java集合框架实际上是java对各种数据结构的实现。比如,线性表,链表,队列,堆,栈,二叉树等,不像C语言,需要全部自己实现。   共性方法 由于大部分集合类都继承了Collection接口,所以Collection接口的方法就是集合类的共性方法,… Read More

Java遍历HashMap,Set, List, ArraryList 删除(remove)或者修改

遍历list的时候为什么不能修改呢? 具体语言实现不同,这里是一些语言无关的点 如果你在遍历时往数组增加数据,会导致遍历不完整(因为增加了新成员长度变了),或者死循环(因为总是有新的进去) 如果在遍历时删除数据,则会导致数组访问越界(因为长度缩短了,指针指向了一个已经标示为空的区域) 如果你只是在遍历时修改这个节点本身的数据,一般来说是安全的(当然需要看具体场景) 以下默认修改为 list 的 add/remove 操作 首先, java 里面有很多种 list :   java.util.ArrayList;   java.util.LinkedList;   java.util.Stack;   java.ut… Read More

在命令行下执行PHP or PHP 执行 shell 指令 (terminal, dos, powershell, shell)

CLI 从版本 4.3.0 开始,PHP 提供了一种新类型的 CLI SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Command Line Interface,即命令行接口。顾名思义,该 CLI SAPI 模块主要用作 PHP 的开发外壳应用。   CLI运行PHP代码 CLI SAPI 模块有以下三种不同的方法来获取要运行的 PHP 代码: 1.让 PHP 运行指定文件。 php my_script.php php -f my_script.php 以上两种方法(使用或不使用 -f 参数)都能够运行给定的 my_script.php 文件。可以选择任何文件来运行,… Read More

Java: SQLite 数据库基本操作 之 去除大小写敏感,防注入,execute,executeQuery和executeUpdate的区别

去除大小写敏感 大部分数据库在进行字符串比较的时候,对大小写是不敏感的。但是,最近使用SQLite的时候,却发现它的情况恰好相反。 假设表User的结构和值如下: UserName 1 User1 执行下面的SQL语句: SELECT * FROM [User] WHERE UserName = 'user1' 结果是没有找到任何记录。明显地,SQLite在进行字符串比较的时候,默认对大小写是敏感的。这会对应用程序造成不良的影响。比如,用户在输入用户名的时候必须严格按照大小写输入,这是一种很不好的用户体验;用户表中可能同时存在 user 和 USER 两个用户,容易造成混淆。 由于SQLite是近年来才兴起的数据库,中文资料少得很。… Read More

Java: SQLite 数据库基本操作

安装 在我们开始之前,我们需要在Java程序中使用SQLite,以确保我们有SQLite的JDBC驱动程序和Java的机器上。可以查看如何在机器上安装Java的教程。现在,让我们来检查一下如何设置SQLite的JDBC驱动程序。 下载 sqlite-jdbc-(VERSION).jar 的最新版本: sqlite-jdbc . 添加下载的jar文件sqlite-jdbc-(VERSION).jar 在类路径中,可以用带 – classpath选项,如下面例子。 前提条件 在学习本教程,应该对Java编程语言的一个很好的理解。因为要处理RDBMS,所以它需要对SQL和数据库的概念有很好的理解。 J… Read More

JAVA: java第三方包学习之jsoup

使用python写爬虫的人,应该都听过beautifulsoup4这个包,用来解析HTML很方便。现在介绍一个类似于beautifulsoup4的java第三方库,功能类似。jsoup 是一个解析 HTML 的第三方 java 库,它提供了一套非常方便的 API,可使用 DOM,CSS 以及类 jQuery 的操作方法来取出和操作数据。 简介 jsoup 是一个解析 HTML 的第三方 java 库,它提供了一套非常方便的 API,可使用 DOM,CSS 以及类 jQuery 的操作方法来取出和操作数据。 jsoup 这个包类似与 python 中流行的 HTML 解析包 Beautifulsoup4。 jsoup 实现了 WHATWG HTML5 规范,能够… Read More

JAVA: 使用FileUtils简化你的文件操作

前言: 在工作当中我们往往遇到很多文件的操作,我们也习惯写一些自己定义的工具类来简化文件操作,其实apache的commons的FileUtils类就是这样一个工具类,使用它能大大的简化我们对文件的操作。   准备工作: 1.下载jar     地址:http://commons.apache.org/proper/commons-io/download_io.cgi 2.把commons-io-2.4.jar 这个文件导入到你的项目中   说明: 1.由于是一个工具类使用都非常的简单 所以本文只是将其分类,展示它能够提供给我们什么。 2.习惯看api的可以直接看官方的api   传送门 3.可以看… Read More

java 集合类Array、List、Map区别和联系

Java集合类主要分为以下三类: 第一类:Array、Arrays 第二类:Collection :List、Set 第三类:Map :HashMap、HashTable 一、Array , Arrays Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。 1、 效率高,但容量固定且无法动态改变。 array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。 2、Java中有一个Arrays类,专门用来操作array 。 arrays中拥有一组static函数, equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。 f… Read More

java中HashMap的用法

重点介绍HashMap。首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。在下文中会有例子具体说明。 再来看看HashMap和TreeMap有什么区别。HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。 import java.util.Map; import java.util.HashMap; import java.util.Set… Read More

JAVA: 读写文件的几种方法

如果您使用java8,可以也参考这篇文章:JAVA: Java8流逐行读取文件 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class MainClass { public static void main(String args) { }