代码缩进调整

This commit is contained in:
结发受长生
2018-05-10 09:47:30 +08:00
parent 7e0b74a322
commit 368ea5915b
127 changed files with 753 additions and 6168 deletions
+16 -16
View File
@@ -2,7 +2,7 @@
title: Lamdba表达式(1)
date: 2018-5-9 20:45:52
categories:
- Java
- Java
---
`Lamdba表达式`是Java8的一项重要的新特性
@@ -22,31 +22,31 @@ Collections.sort(names, (o1,o2)->o1.compareTo(o2));
等价于以下代码
```java
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
```
也许下面的代码能更好地体现Lamdba表达式就是匿名类的另外一种写法
```java
public class Main {
public static void main(String[] args) {
Demo d = ()->{return "aa";};
d.func();
}
public static void main(String[] args) {
Demo d = ()->{return "aa";};
d.func();
}
}
interface Demo {
public String func();
public String func();
}
```
---
#### Lamdba表达式语法
```java
(Type1 param1, Type2 params,...,TypeN paramN) -> {
//若干语句...
return 表达式;
//若干语句...
return 表达式;
}
```
这是一般语法 , 也就是最完整的一种语法
@@ -56,15 +56,15 @@ interface Demo {
1. 编译器可以根据上下文推断参数的类型 , 大多数情况下参数类型可以省略
```java
(param1, params,...,paramN) -> {
//若干语句...
return 表达式;
//若干语句...
return 表达式;
}
```
2. 当参数只有一个 , 可以省略小括号
```java
param -> {
//若干语句...
return 表达式;
//若干语句...
return 表达式;
}
```
3. 当方法中只包含一条语句 , 可以省略大括号 return 和 最后的分号
@@ -2,7 +2,7 @@
title: Lamdba表达式(2)-Stream
date: 2018-5-9 20:46:13
categories:
- Java
- Java
---
有了Lamdba表达式 , Java就具有了进行函数式编程的条件
+24 -24
View File
@@ -2,9 +2,9 @@
title: Maven(1)-初见
date: 2018-5-9 20:18:14
tags:
- maven
- maven
categories:
- Java
- Java
---
我们在工作中可能会在IDE当中有很多项目
@@ -59,29 +59,29 @@ categories:
这里尝试引入几个jar包
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>maven_demo</groupId>
<artifactId>hello_maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>maven_demo</groupId>
<artifactId>hello_maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>mongo</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>mongo</groupId>
<artifactId>morphia</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>mongo</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>mongo</groupId>
<artifactId>morphia</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
```
@@ -2,9 +2,9 @@
title: Maven(2)-搭建web项目
date: 2018-5-9 20:25:23
tags:
- maven
- maven
categories:
- Java
- Java
---
在Maven当中创建一个web项目的步骤如下
@@ -2,9 +2,9 @@
title: Maven(3)-从入门到重新入门
date: 2018-5-9 20:29:31
tags:
- maven
- maven
categories:
- Java
- Java
---
`Maven`是基于项目对象模型 ( POM ) , 可以通过描述信息来管理项目的构建 报告 和文档的软件项目管理工具
+12 -12
View File
@@ -2,9 +2,9 @@
title: Maven(4)-补充
date: 2018-5-9 20:29:31
tags:
- maven
- maven
categories:
- Java
- Java
---
maven默认使用的JDK版本是1.5 , 我们可以在配置文件中`<profiles>`标签里加入如下内容 , 将默认JDK改为1.8
@@ -35,15 +35,15 @@ maven默认使用的JDK版本是1.5 , 我们可以在配置文件中`<profiles>`
那么我们可以将C排除
```xml
<dependency>
<groupId>B-group</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>C-group</groupId>
<artifactId>C</artifactId>
</exclusion>
</exclusions>
<groupId>B-group</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>C-group</groupId>
<artifactId>C</artifactId>
</exclusion>
</exclusions>
</dependency>
```
这样就可以把对C的依赖排除
@@ -66,7 +66,7 @@ maven在处理这种冲突的时候 , 有以下的原则
比如
```xml
<properties>
<spring-version>4.3.11.RELEASE</spring-version>
<spring-version>4.3.11.RELEASE</spring-version>
</properties>
...
<dependencies>
+13 -13
View File
@@ -2,9 +2,9 @@
title: Maven(5)-jetty-plugin
date: 2018-5-9 20:32:31
tags:
- maven
- maven
categories:
- Java
- Java
---
与tomcat类似 , jetty也是一个servlet容器 , 为例如jsp和servlet提供运行环境
@@ -21,17 +21,17 @@ categories:
<build>
...
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.7.RC0</version>
<configuration>
<jettyXml>jetty.xml</jettyXml>
<webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
<scanIntervalSeconds>3</scanIntervalSeconds>
<contextPath>/</contextPath>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.7.RC0</version>
<configuration>
<jettyXml>jetty.xml</jettyXml>
<webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
<scanIntervalSeconds>3</scanIntervalSeconds>
<contextPath>/</contextPath>
</configuration>
</plugin>
</plugins>
...
</build>
@@ -2,9 +2,9 @@
title: Maven(6)-可运行jar打包
date: 2018-5-9 20:42:27
tags:
- maven
- maven
categories:
- Java
- Java
---
要让jar包是可运行的
@@ -20,24 +20,24 @@ pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.main.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.main.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
...
<plugins>
@@ -2,9 +2,9 @@
title: 自增的线程安全问题
date: 2018-5-9 20:48:56
tags:
- 线程
- 线程
categories:
- Java
- Java
---
Java中的 `i++` 操作也是有可能存在线程安全问题的
@@ -18,42 +18,42 @@ Java中的 `i++` 操作也是有可能存在线程安全问题的
private static int num = 0;
private static void cnt() {
for(int i=0 ; i<100 ; i++) {
num ++;
}
for(int i=0 ; i<100 ; i++) {
num ++;
}
}
public static void main(String[] args) {
List<Thread> thList = new ArrayList<Thread>();
for(int i=0 ; i<10 ; i++) {
Thread thread = new Thread(){
@Override
public void run() {
try {
//由于自增操作的运算速度要远快于创建和启动线程
//执行一个等待去保证所有的子线程都构造完成以后再执行自增操作
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
cnt();
}
};
thread.start();
thList.add(thread);
}
while(true) {
boolean flag = true;
//判断是否所有子线程都已结束
for(Thread thread : thList) {
flag = flag && !thread.isAlive();
}
if(flag) {
break;
}
}
System.out.println(num);
List<Thread> thList = new ArrayList<Thread>();
for(int i=0 ; i<10 ; i++) {
Thread thread = new Thread(){
@Override
public void run() {
try {
//由于自增操作的运算速度要远快于创建和启动线程
//执行一个等待去保证所有的子线程都构造完成以后再执行自增操作
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
cnt();
}
};
thread.start();
thList.add(thread);
}
while(true) {
boolean flag = true;
//判断是否所有子线程都已结束
for(Thread thread : thList) {
flag = flag && !thread.isAlive();
}
if(flag) {
break;
}
}
System.out.println(num);
}
```
以上程序的执行结果多数情况都不是1000 , 虽然num++确实被执行了1000次
@@ -88,7 +88,7 @@ inited = true;//语句2
//线程B
while(!inited) {
sleep();
sleep();
}
doSomething(context);
```
@@ -137,11 +137,11 @@ private static int num = 0;
private static Object obj = new Object();
private static void cnt() {
for(int i=0 ; i<100 ; i++) {
synchronized (obj) {
num ++;
}
}
for(int i=0 ; i<100 ; i++) {
synchronized (obj) {
num ++;
}
}
}
```
+ 使用ReentrantLock
@@ -150,11 +150,11 @@ private static int num = 0;
private static ReentrantLock objLock = new ReentrantLock();
private static void cnt() {
for(int i=0 ; i<100 ; i++) {
objLock.lock();
num ++;
objLock.unlock();
}
for(int i=0 ; i<100 ; i++) {
objLock.lock();
num ++;
objLock.unlock();
}
}
```
@@ -165,11 +165,11 @@ private static void cnt() {
调用这个类中的可用方法进行自增操作 , 可以保证线程安全
```java
private static AtomicInteger num = new AtomicInteger(0);
private static void cnt() {
for(int i=0 ; i<100 ; i++) {
num.getAndIncrement();//以原子方式获取并且自增1
}
for(int i=0 ; i<100 ; i++) {
num.getAndIncrement();//以原子方式获取并且自增1
}
}
```
>传统的锁机制需要陷入内核态,造成上下文切换,但是一般持有锁的时间很短,频繁的陷入内核开销太大,所以随着机器硬件支持CAS后,JAVA推出基于compare and set机制的AtomicInteger,实际上就是一个CPU循环忙等待。因为持有锁时间一般较短,所以大部分情况CAS比锁性能更优。