Skip to content

Commit 1d2f7d6

Browse files
committed
init JavaSourceLearning
1 parent 73adf00 commit 1d2f7d6

File tree

199 files changed

+2829
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

199 files changed

+2829
-1
lines changed

JdkLearn/learnjava.iml

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="Spring" name="Spring">
5+
<configuration />
6+
</facet>
7+
<facet type="web" name="Web">
8+
<configuration>
9+
<webroots />
10+
<sourceRoots>
11+
<root url="file://$MODULE_DIR$/src/main/java" />
12+
<root url="file://$MODULE_DIR$/src/main/resources" />
13+
</sourceRoots>
14+
</configuration>
15+
</facet>
16+
</component>
17+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
18+
<output url="file://$MODULE_DIR$/target/classes" />
19+
<output-test url="file://$MODULE_DIR$/target/test-classes" />
20+
<content url="file://$MODULE_DIR$">
21+
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
22+
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
23+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
24+
<excludeFolder url="file://$MODULE_DIR$/target" />
25+
</content>
26+
<orderEntry type="inheritedJdk" />
27+
<orderEntry type="sourceFolder" forTests="false" />
28+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.2.1.RELEASE" level="project" />
29+
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.2.1.RELEASE" level="project" />
30+
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.2.1.RELEASE" level="project" />
31+
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.2.1.RELEASE" level="project" />
32+
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.1.RELEASE" level="project" />
33+
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.1.RELEASE" level="project" />
34+
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.1.RELEASE" level="project" />
35+
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.1.RELEASE" level="project" />
36+
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.29" level="project" />
37+
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.2.1.RELEASE" level="project" />
38+
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.43.Final" level="project" />
39+
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.43.Final" level="project" />
40+
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.43.Final" level="project" />
41+
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.43.Final" level="project" />
42+
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.43.Final" level="project" />
43+
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.43.Final" level="project" />
44+
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.0.RELEASE" level="project" />
45+
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
46+
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.7.0" level="project" />
47+
<orderEntry type="library" name="Maven: hessian:hessian:3.0.1" level="project" />
48+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
49+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
50+
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.1.RELEASE" level="project" />
51+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
52+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
53+
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
54+
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
55+
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
56+
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
57+
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
58+
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
59+
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
60+
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
61+
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
62+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.1.RELEASE" level="project" />
63+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.1.RELEASE" level="project" />
64+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.0" level="project" />
65+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.0" level="project" />
66+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.0" level="project" />
67+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.0" level="project" />
68+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.0" level="project" />
69+
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.0" level="project" />
70+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.1.RELEASE" level="project" />
71+
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.27" level="project" />
72+
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.27" level="project" />
73+
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.27" level="project" />
74+
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.1.RELEASE" level="project" />
75+
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.1" level="project" />
76+
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" level="project" />
77+
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
78+
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
79+
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.1.RELEASE" level="project" />
80+
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.1.RELEASE" level="project" />
81+
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.1.RELEASE" level="project" />
82+
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.1.RELEASE" level="project" />
83+
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.10" level="project" />
84+
<orderEntry type="library" name="Maven: junit:junit:4.12" level="project" />
85+
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:2.1" level="project" />
86+
<orderEntry type="library" name="Maven: org.springframework:spring-test:5.2.1.RELEASE" level="project" />
87+
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.2.1.RELEASE" level="project" />
88+
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.2.1.RELEASE" level="project" />
89+
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.2.1.RELEASE" level="project" />
90+
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
91+
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
92+
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
93+
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
94+
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.2" level="project" />
95+
<orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.1" level="project" />
96+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.5.2" level="project" />
97+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.5.2" level="project" />
98+
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
99+
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
100+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.5.2" level="project" />
101+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.5.2" level="project" />
102+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.5.2" level="project" />
103+
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.5.2" level="project" />
104+
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.1.0" level="project" />
105+
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.13.2" level="project" />
106+
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.1" level="project" />
107+
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.1.0" level="project" />
108+
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.2" level="project" />
109+
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.2" level="project" />
110+
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
111+
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
112+
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
113+
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.3" level="project" />
114+
</component>
115+
</module>

JdkLearn/pom.xml

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>org.springframework.boot</groupId>
7+
<artifactId>spring-boot-starter-parent</artifactId>
8+
<version>2.2.1.RELEASE</version>
9+
<relativePath/> <!-- lookup parent from repository -->
10+
</parent>
11+
<groupId>com.learnjava</groupId>
12+
<artifactId>learnjava</artifactId>
13+
<version>0.0.1-SNAPSHOT</version>
14+
<name>learnjava</name>
15+
<description>Demo project for Spring Boot</description>
16+
17+
<properties>
18+
<java.version>1.8</java.version>
19+
</properties>
20+
21+
<dependencies>
22+
23+
<!-- redis依赖 -->
24+
<dependency>
25+
<groupId>org.springframework.boot</groupId>
26+
<artifactId>spring-boot-starter-data-redis</artifactId>
27+
</dependency>
28+
<!-- 如果在properties中配置了pool,则需要引入这个依赖 -->
29+
<dependency>
30+
<groupId>org.apache.commons</groupId>
31+
<artifactId>commons-pool2</artifactId>
32+
</dependency>
33+
34+
<!-- https://mvnrepository.com/artifact/hessian/hessian -->
35+
<dependency>
36+
<groupId>hessian</groupId>
37+
<artifactId>hessian</artifactId>
38+
<version>3.0.1</version>
39+
</dependency>
40+
41+
<dependency>
42+
<groupId>org.springframework.boot</groupId>
43+
<artifactId>spring-boot-starter</artifactId>
44+
</dependency>
45+
46+
<dependency>
47+
<groupId>org.springframework.boot</groupId>
48+
<artifactId>spring-boot-starter-web</artifactId>
49+
</dependency>
50+
51+
<dependency>
52+
<groupId>org.projectlombok</groupId>
53+
<artifactId>lombok</artifactId>
54+
<optional>true</optional>
55+
</dependency>
56+
57+
<dependency>
58+
<groupId>junit</groupId>
59+
<artifactId>junit</artifactId>
60+
</dependency>
61+
62+
<dependency>
63+
<groupId>org.springframework</groupId>
64+
<artifactId>spring-test</artifactId>
65+
<version>5.2.1.RELEASE</version>
66+
<scope>compile</scope>
67+
</dependency>
68+
69+
<dependency>
70+
<groupId>org.springframework.boot</groupId>
71+
<artifactId>spring-boot-starter-test</artifactId>
72+
<scope>test</scope>
73+
<exclusions>
74+
<exclusion>
75+
<groupId>org.junit.vintage</groupId>
76+
<artifactId>junit-vintage-engine</artifactId>
77+
</exclusion>
78+
</exclusions>
79+
</dependency>
80+
</dependencies>
81+
82+
<build>
83+
<plugins>
84+
<plugin>
85+
<groupId>org.springframework.boot</groupId>
86+
<artifactId>spring-boot-maven-plugin</artifactId>
87+
</plugin>
88+
</plugins>
89+
</build>
90+
91+
</project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.learnjava;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.context.annotation.PropertySource;
6+
7+
@SpringBootApplication
8+
public class LearnjavaApplication {
9+
10+
public static void main(String[] args) {
11+
SpringApplication.run(LearnjavaApplication.class, args);
12+
}
13+
14+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.learnjava.concurent;
2+
3+
import java.util.concurrent.CompletableFuture;
4+
5+
public class CompletableFutureDemo {
6+
7+
public static void main(String[] args) throws Exception {
8+
CompletableFutureDemo completableFutureDemo = new CompletableFutureDemo();
9+
completableFutureDemo.test_completed_future();
10+
}
11+
12+
public void test_completed_future() throws Exception {
13+
String expectedValue = "the expected value";
14+
CompletableFuture<String> alreadyCompleted = CompletableFuture.completedFuture(expectedValue);
15+
System.out.println(alreadyCompleted.get());
16+
}
17+
18+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.learnjava.concurent;
2+
3+
import java.util.concurrent.*;
4+
5+
public class ForkJoinDemo {
6+
7+
/**
8+
*
9+
* Fork/join用法;
10+
* 1. 让任务类Task继承RecursiveTask<T>, 实现RecursiveTask的compute()方法
11+
* 2. 在compute()方法里,调用Task.fork()方法,开启子任务,然后再调用Task.join()合并结果
12+
* 3. 通过线程池调用Fork/Join框架:
13+
* ForkJoinPool pool = new ForkJoinPool();
14+
* Future<Integer> future = pool.submit(task);
15+
* T t = future.get(1, TimeUnit.SECONDS);
16+
*
17+
*/
18+
19+
public static void main(String ... args) throws ExecutionException, InterruptedException, TimeoutException {
20+
21+
ForkJoinPool pool = new ForkJoinPool();
22+
23+
int[] array = {100,400,200,90,80,300,600,10,20,-10,30,2000,1000};
24+
25+
MaxNumber task = new MaxNumber(array, 0, array.length - 1);
26+
27+
Future<Integer> future = pool.submit(task);
28+
29+
System.out.println("Result:" + future.get(1, TimeUnit.SECONDS));
30+
31+
}
32+
33+
/**
34+
* how to find the max number in array by Fork/Join
35+
*/
36+
private static class MaxNumber extends RecursiveTask<Integer> {
37+
38+
private int threshold = 2;
39+
40+
private int[] array; // the data array
41+
42+
private int index0 = 0;
43+
private int index1 = 0;
44+
45+
public MaxNumber(int[] array, int index0, int index1) {
46+
this.array = array;
47+
this.index0 = index0;
48+
this.index1 = index1;
49+
}
50+
51+
@Override
52+
protected Integer compute() {
53+
int max = Integer.MIN_VALUE;
54+
if ((index1 - index0) <= threshold) {
55+
56+
for (int i = index0;i <= index1; i ++) {
57+
max = Math.max(max, array[i]);
58+
}
59+
60+
} else {
61+
//fork/join
62+
int mid = index0 + (index1 - index0) / 2;
63+
MaxNumber lMax = new MaxNumber(array, index0, mid);
64+
MaxNumber rMax = new MaxNumber(array, mid + 1, index1);
65+
66+
lMax.fork();
67+
rMax.fork();
68+
69+
int lm = lMax.join();
70+
int rm = rMax.join();
71+
72+
max = Math.max(lm, rm);
73+
74+
}
75+
76+
return max;
77+
}
78+
}
79+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.learnjava.concurent;
2+
3+
import java.util.concurrent.CountDownLatch;
4+
5+
public class ThreadLocalTest {
6+
public static void main(String[] args) throws InterruptedException {
7+
int threads = 3;
8+
CountDownLatch countDownLatch = new CountDownLatch(threads);
9+
10+
InnerClass innerClass = new InnerClass();
11+
for (int i = 1; i <= threads; i++) {
12+
new Thread(() -> {
13+
for (int j = 0; j < 4; j++) {
14+
innerClass.add(String.valueOf(j));
15+
innerClass.print();
16+
}
17+
18+
innerClass.set("hello world");
19+
countDownLatch.countDown();
20+
}, "thread - " + i).start();
21+
}
22+
countDownLatch.await();
23+
24+
}
25+
26+
private static class InnerClass {
27+
public void add(String newStr) {
28+
//利用Counter类来实例化StringBuilder
29+
StringBuilder stringBuilder = Counter.counter.get();
30+
31+
//将newStr存进ThreadLocal里
32+
Counter.counter.set(stringBuilder.append(newStr));
33+
}
34+
35+
/**
36+
* 打印ThreadLocal的信息
37+
*/
38+
public void print() {
39+
System.out.printf("Thread name:%s , ThreadLocal hashcode:%s, Instance hashcode:%s, Value:%s\n",
40+
Thread.currentThread().getName(),
41+
Counter.counter.hashCode(),
42+
Counter.counter.get().hashCode(),
43+
Counter.counter.get().toString());
44+
}
45+
46+
public void set(String word) {
47+
Counter.counter.set(new StringBuilder(word));
48+
System.out.printf("Set, Thread name:%s , ThreadLocal hashcode:%s, Instance hashcode:%s, Value:%s\n",
49+
Thread.currentThread().getName(),
50+
Counter.counter.hashCode(),
51+
Counter.counter.get().hashCode(),
52+
Counter.counter.get().toString());
53+
}
54+
}
55+
56+
private static class Counter {
57+
private static ThreadLocal<StringBuilder> counter = new ThreadLocal<StringBuilder>() {
58+
@Override
59+
protected StringBuilder initialValue() {
60+
return new StringBuilder();
61+
}
62+
};
63+
}
64+
}

0 commit comments

Comments
 (0)