diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index 454757c..0000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/.idea/artifacts/concurrency_war.xml b/.idea/artifacts/concurrency_war.xml
new file mode 100644
index 0000000..c242efa
--- /dev/null
+++ b/.idea/artifacts/concurrency_war.xml
@@ -0,0 +1,14 @@
+
+
+ $PROJECT_DIR$/target
+
+
+ concurrency
+ war
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/concurrency_war_exploded.xml b/.idea/artifacts/concurrency_war_exploded.xml
new file mode 100644
index 0000000..fc52b15
--- /dev/null
+++ b/.idea/artifacts/concurrency_war_exploded.xml
@@ -0,0 +1,76 @@
+
+
+ $PROJECT_DIR$/target/concurrency-0.0.1-SNAPSHOT
+
+
+ true
+ concurrency
+ war
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dictionaries/shishusheng.xml b/.idea/dictionaries/shishusheng.xml
new file mode 100644
index 0000000..881bbf2
--- /dev/null
+++ b/.idea/dictionaries/shishusheng.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..b26911b
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..85193ab
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml
new file mode 100644
index 0000000..c6ea67e
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml
new file mode 100644
index 0000000..f538e36
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml
new file mode 100644
index 0000000..33c30b4
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml
new file mode 100644
index 0000000..49b4ec7
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_10.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_10.xml
new file mode 100644
index 0000000..5d9d662
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_10.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_10.xml
new file mode 100644
index 0000000..df5cb22
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
new file mode 100644
index 0000000..0e66824
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_0_18.xml b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_0_18.xml
new file mode 100644
index 0000000..702d49b
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_0_18.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_23_0.xml b/.idea/libraries/Maven__com_google_guava_guava_23_0.xml
new file mode 100644
index 0000000..589a439
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_guava_guava_23_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml
new file mode 100644
index 0000000..c06f999
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml
new file mode 100644
index 0000000..578b079
--- /dev/null
+++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
new file mode 100644
index 0000000..b8581a6
--- /dev/null
+++ b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml b/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml
new file mode 100644
index 0000000..940ce73
--- /dev/null
+++ b/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__joda_time_joda_time_2_9.xml b/.idea/libraries/Maven__joda_time_joda_time_2_9.xml
new file mode 100644
index 0000000..bb6a71f
--- /dev/null
+++ b/.idea/libraries/Maven__joda_time_joda_time_2_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 0000000..d411041
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml
new file mode 100644
index 0000000..88d626e
--- /dev/null
+++ b/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml
new file mode 100644
index 0000000..6c692c8
--- /dev/null
+++ b/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml
new file mode 100644
index 0000000..cc0b58b
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_23.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_23.xml
new file mode 100644
index 0000000..99e8c9e
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_23.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_23.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_23.xml
new file mode 100644
index 0000000..9837b75
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_23.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_23.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_23.xml
new file mode 100644
index 0000000..6a989bb
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_23.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_23.xml b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_23.xml
new file mode 100644
index 0000000..4aba27a
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_23.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml b/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml
new file mode 100644
index 0000000..58bdc9a
--- /dev/null
+++ b/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml b/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml
new file mode 100644
index 0000000..1af11e4
--- /dev/null
+++ b/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 0000000..f58bbc1
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
new file mode 100644
index 0000000..78dbe45
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml
new file mode 100644
index 0000000..3c0ddd4
--- /dev/null
+++ b/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_1_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_1_Final.xml
new file mode 100644
index 0000000..6dc7a37
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml b/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml
new file mode 100644
index 0000000..a523703
--- /dev/null
+++ b/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml
new file mode 100644
index 0000000..7ab319b
--- /dev/null
+++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml
new file mode 100644
index 0000000..da69f6c
--- /dev/null
+++ b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml
new file mode 100644
index 0000000..f86d2c8
--- /dev/null
+++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml
new file mode 100644
index 0000000..bae9949
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml
new file mode 100644
index 0000000..6073e53
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml
new file mode 100644
index 0000000..a14ac63
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
new file mode 100644
index 0000000..20e8163
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..44dc419
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..4c3a2b7
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..c6ba5e1
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..33c0b1c
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..d7db397
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..ed7b340
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..f0bd94f
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..9312efe
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_9_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_9_RELEASE.xml
new file mode 100644
index 0000000..07d7bca
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_9_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..e06e71e
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_aop_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..0a8cafe
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_beans_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_context_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..8050852
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_context_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_core_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..b95dd78
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_core_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..7a825ff
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_expression_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_test_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_test_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..0c0fcbf
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_test_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_web_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..31aebfb
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_web_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_13_RELEASE.xml
new file mode 100644
index 0000000..01a3291
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_13_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml
new file mode 100644
index 0000000..20e2920
--- /dev/null
+++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__redis_clients_jedis_2_8_2.xml b/.idea/libraries/Maven__redis_clients_jedis_2_8_2.xml
new file mode 100644
index 0000000..5fe8223
--- /dev/null
+++ b/.idea/libraries/Maven__redis_clients_jedis_2_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..7d01223
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..6373207
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..8bb0e83
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 79d2603..e225f10 100755
--- a/README.md
+++ b/README.md
@@ -1,78 +1,203 @@
-## 1 目标
-致力于构建全球最完善的 Java 高并发理论体系。让我们的程序更加可靠,跳槽面试更轻松。
+# 0 Java 高并发理论 基础知识点全覆盖
+## 无论跳槽面试 / 开发,技能都将高人一等
-## 高并发方案概要
-### 线程安全性
-线程安全性,主要从原子性、可见性、有序性
+# 1 多线程并发与线程安全,让程序更可靠
-### 安全发布对象
-安全发布对象的一些核心方法,主要通过单例类的多种实现方式体会,这也是对线程安全性的巩固,也是把线程安全性涉及的一些关键字和类再一次放到实际场景使用。
+## 大量代码实例来讲解,深度掌握高并发编程
-### 线程安全策略
+
+
+# 2 高并发处理思路与手段,让跳槽面试从容不迫
+
+## 2.1 接轨企业需求的并发技能
+
+从真实应用场景出发,从0解构线程与并发
+
+## 2.2 并发面试综合案例
+
+并发面试必问考点,理清思路总结要点
+
+## 2.3 设计巧妙易于理解
+
+巧妙实例便于理解
+
+
+
+## 2.4 深入理解底层原理 解决企业级并发业务问题 翻越并发技术的大山
+
+### 线程的核心
+
+#### 工作/面试的利器
+
+- 线程N种实现方式
+网络众口不一,真伪难辨,本教程直击本质
+
+- 线程启动你真的会么?
+启动线程,从错误到正确,带你从错误中总结真理
+
+- 线程停止、中断的最佳实践
+把我线程停止原则
+
+- 图解线程生命周期
+面试 show 出此图,优秀候选人非你莫属
+
+- 趣解Thread和Object类中线程相关方法
+wait、notify、join、yield…各有千秋
+
+- 一网打尽线程属性线程属性
+三大经典面试问题,你晓得么?
+
+- 线程异常处理
+无处不在的异常,只需一招自定义异常
+
+- 线程安全与程序性能,取舍之道
+线程安全导致性能降低,看似无解,实则只是学艺不精
+
+# 3 精讲Java面试中的高频并发问题
+为什么wait必须在同步代码块中使用?
+
+线程是如何在6种状态之间切换的?
+
+哪些场景需要额外注意线程安全问题?
+
+讲一讲什么是Java内存模型?
+
+happens-before、volatile和可见性的关系?
+
+实际开发中如何避免死锁?
+
+# 4 领悟Java大佬的学习方法与体系思想
+如何从宏观和微观两个方面来提高技术?
+
+提高技术的途径有哪些?
+
+如何了解技术领域的前沿动态?
+
+工作中业务缠身,如何在业务开发中得到更多成长?
+
+如何分析native的c/cpp代码,如何使用openJDK?
+
+“自顶向下”的学习方法以及好处?
+
+# 5 环境参数
+
+## 基本工具
+
+- Maven 3.3.9+
+
+- JDK 8+
+
+- Tomcat 8+
+
+- MySQL 8.0.16+
+
+- Redis 5+
+
+## IDE
+Intellij IDEA 2019.2+
+
+## 测试工具
+Postman
+
+JMeter
+
+## 框架
+SpringBoot
+
+Mybatis
+
+## 组件
+Kafka
+
+RabbitMQ
+
+elastic-job...
+
+# 6 知识点概要
+
+## 线程安全性
+线程安全性,主要从原子性、可见性、有序性三个方面
+
+原子性部分, atomic包下相关类、CAS原理、Unsafe类、synchronized关键字等的使用及注意事项
+可见性部分,主要介绍的是volatile关键字的规则和使用,及synchronized关键字的可见性
+有序性部分,则重点讲解了happens-before原则
+
+## 安全发布对象
+安全发布对象的一些核心方法,主要通过单例类的多种实现方式,让大家在实现过程中去体会这些方法的具体含义
+这也是对线程安全性的巩固,也是把线程安全性涉及的一些关键字和类再一次放到实际场景中使用,加深大家对他们的印象和认识
+
+## 线程安全策略
线程安全策略,包括定义不可变对象、线程封闭、同步容器、并发容器等,引出并发里的关键知识J.U.C。
-同时还额外介绍了开发中常见的一些线程不安全类和写法,并给出他们各自对应的替代方案。
-### AQS
-J.U.C的重要组件,面试必问考点。
+同时还额外介绍了开发中常见的一些线程不安全类和写法,并给出他们各自对应的替代方案。这一章涉及的内容在日常开发和面试中都会涉及很多。...
-AQS模型设计及相关同步组件的原理和使用,都非常实用,包括:CountDownLatch、Semaphore、CyclicBarrier、ReentrantLock与锁、Condition等。
+## J.U.C之AQS讲解
+AQS是J.U.C的重要组件,也是面试的重要考点。
-这些组件需要大家能熟练明白他们的用途及差异,不但会使用,而且还要明确知道不同方法调用后的不同效果。
+AQS模型设计及相关同步组件的原理和使用,都非常实用,具体包括:CountDownLatch、Semaphore、CyclicBarrier、ReentrantLock与锁、Condition等。
-### J.U.C组件拓展
+这些组件需要大家能熟练明白他们的用途及差异,不但会使用,而且还要明确知道不同方法调用后的不同效果。...
+## J.U.C组件拓展
J.U.C相关组件,主要包括FutureTask、Fork/Join框架、BlockingQueue,其中FutureTask讲解时会对比着Callable、Runnable、Future来讲。
这些组件使用场景相对AQS会少一些,但也是J.U.C的重要组成部分,也是需要掌握的
-### 线程调度-线程池
-new Thread弊端、线程池的好处、ThreadPoolExecutor详细介绍(参数、状态、方法)、线程池类图、Executor框架接口
+## 线程调度-线程池
+J.U.C里最后一部分:线程池。面试大概率会问到线程池相关的知识点。
+
+这一章将主要从new Thread弊端、线程池的好处、ThreadPoolExecutor详细介绍(参数、状态、方法)、线程池类图、Executor框架接口等进行讲解,需要大家能了解线程池的许多细节及配置,并能在实际项目中正确使用
-### 多线程并发拓展
-死锁产生的条件及预防、多线程并发编程的最佳实践、Spring与线程安全、以及面试都特别喜欢问的HashMap和ConcurrentMap源码细节
-### 扩容
-垂直扩容和水平扩容的区别,数据库读操作扩展和写操作扩展
+## 多线程并发拓展讲解
+对并发编程做些补充,但都贴近当前的面试,主要讲解死锁产生的条件及预防、多线程并发编程的最佳实践、Spring与线程安全、以及面试都特别喜欢问的HashMap和ConcurrentMap源码细节。当然,面试喜欢问的问题,对实际项目开发也是特别重要的
-### 缓存
-缓存特征(命中率、最大元素、清空策略)、影响缓存命中率因素、缓存分类和应用场景(本地缓存、分布式缓存)、高并发场景下缓存常见问题(缓存一致性、缓存并发、缓存穿透、雪崩)
-### MQ
-消息队列的特性(业务无关、FIFO、容灾、性能)、为什么需要消息队列以及消息队列的好处(业务解耦、最终一致性、广播、错峰与流控)
+## 高并发之扩容
+高并发部分:思路,侧重面试,扩容思路,首先介绍垂直扩容和水平扩容的区别,之后介绍数据库读操作扩展和写操作扩展思路。
-### 应用拆分
+## 高并发之缓存
+思路,本章讲解高并发中缓存方案。
-### 限流
-明确限流的重要作用
-限流常用的四种算法:计数法、滑动窗口、漏桶算法和令牌桶算法
+包含对缓存特征(命中率、最大元素、清空策略)、影响缓存命中率因素、缓存分类和应用场景(本地缓存、分布式缓存)、高并发场景下缓存常见问题(缓存一致性、缓存并发、缓存穿透、雪崩)等的具体介绍。此外,针对大家常用的缓存组件Guava Cache、Memcache、Redis
-### 服务降级与服务熔断
-服务降级的分类:自动降级(超时、失败次数、故障、限流)和人工降级(开关),总结了服务降级和服务熔断的共性(目的、最终表现、粒度、自治)和区别(出发原因、管理目标层次、实现方式)以及服务降级要考虑的问题
+## 高并发之消息队列
+思路,本章介绍了消息队列的特性(业务无关、FIFO、容灾、性能)、为什么需要消息队列以及消息队列的好处(业务解耦、最终一致性、广播、错峰与流控),最后对当前比较流行的消息队列组件kafka和rabbitmq做了架构分析和特性介绍
-### 分库分表
+## 高并发之应用拆分
+从实际项目拆分步骤讲起,让大家可以实际感受到应用拆分的好处和解决的问题,之后引出对应用拆分原则(业务优先、循序渐进、兼顾技术、可靠测试)和应用拆分时思考的内容(应用之间通信、应用之间数据库设计、避免事务跨应用),并引出对服务化Dubbo和微服务Spring Cloud的框架介绍
-## QQ 技术交流群
+## 高并发之应用限流
+思路,本章从实际项目保存百万数据的限流场景开始讲起,让大家感受一下某些高并发场景下使用限流和不使用限流的区别,明确限流的重要作用
-为大家提供一个学习交流平台,在这里你可以自由地讨论技术问题。
+之后详细介绍了限流常用的四种算法:计数法、滑动窗口、漏桶算法和令牌桶算法,并对他们做了简单的对比
-
+## 服务降级与服务熔断
+通过举例让大家明白什么是服务降级和服务熔断
-## 微信交流群
-
+之后介绍了服务降级的分类:自动降级(超时、失败次数、故障、限流)和人工降级(开关),总结了服务降级和服务熔断的共性(目的、最终表现、粒度、自治)和区别(出发原因、管理目标层次、实现方式)以及服务降级要考虑的问题
-### 本人微信
-
+最后介绍了Hystrix
-## Java源码模拟面试解析指南
+## 数据库分库分表与高可用手段
+高并发部分:主讲思路,从数据库瓶颈开始讲起,引出对数据库切库分库分表的介绍。数据库切库里重点介绍了读写分离的设计,对比支持多数据源和分库的区别;
-
-
+最后介绍了什么时候该考虑分表、横向分表与纵向分表,以及通过mybatis的分页插件shardbatis2.0实现数据库分表
+之后介绍了高可用的三个常用手段:任务调度系统分布
+
+## 知识体系总结
+对知识进行总结回顾,希望大家都能有所收获,并期待与大家共同探讨并发与高并发的话题
-### 绘图工具
-- [draw.io](https://www.draw.io/)
-- keynote
-## 知识体系

+
+# 参考
+- [Java并发编程实战](https://book.douban.com/subject/10484692/)
+
+- [Java并发编程入门与高并发面试](https://coding.imooc.com/class/195.html)
+
+- [Java并发编程的艺术](https://book.douban.com/subject/26591326/)
+
+- [深入理解Java虚拟机第二版](https://book.douban.com/subject/24722612/)
diff --git a/assets/LOGO.png b/assets/LOGO.png
deleted file mode 100644
index b5e3b09..0000000
Binary files a/assets/LOGO.png and /dev/null differ
diff --git "a/assets/QQ \347\276\244.JPG" "b/assets/QQ \347\276\244.JPG"
deleted file mode 100644
index c6a3f39..0000000
Binary files "a/assets/QQ \347\276\244.JPG" and /dev/null differ
diff --git "a/assets/\344\270\252\344\272\272\345\276\256\344\277\241.jpeg" "b/assets/\344\270\252\344\272\272\345\276\256\344\277\241.jpeg"
deleted file mode 100644
index 35b73f0..0000000
Binary files "a/assets/\344\270\252\344\272\272\345\276\256\344\277\241.jpeg" and /dev/null differ
diff --git "a/assets/\345\205\254\344\274\227\345\217\267.png" "b/assets/\345\205\254\344\274\227\345\217\267.png"
deleted file mode 100644
index e8c9c92..0000000
Binary files "a/assets/\345\205\254\344\274\227\345\217\267.png" and /dev/null differ
diff --git "a/assets/\345\276\256\344\277\241\347\276\244.jpeg" "b/assets/\345\276\256\344\277\241\347\276\244.jpeg"
deleted file mode 100644
index abeb9ae..0000000
Binary files "a/assets/\345\276\256\344\277\241\347\276\244.jpeg" and /dev/null differ
diff --git "a/assets/\347\211\233\345\256\242\344\270\223\345\210\212.png" "b/assets/\347\211\233\345\256\242\344\270\223\345\210\212.png"
deleted file mode 100644
index 6f48493..0000000
Binary files "a/assets/\347\211\233\345\256\242\344\270\223\345\210\212.png" and /dev/null differ
diff --git a/concurrency.iml b/concurrency.iml
new file mode 100644
index 0000000..a91de9f
--- /dev/null
+++ b/concurrency.iml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/javaedge/concurrency/ConcurrencyApplication.java b/concurrency/src/main/java/com/javaedge/concurrency/ConcurrencyApplication.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/ConcurrencyApplication.java
rename to concurrency/src/main/java/com/javaedge/concurrency/ConcurrencyApplication.java
index aec342b..edd52be 100755
--- a/src/main/java/com/javaedge/concurrency/ConcurrencyApplication.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/ConcurrencyApplication.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency;
+package com.javaedge.concurrency;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/src/main/java/com/javaedge/concurrency/ConcurrencyTest.java b/concurrency/src/main/java/com/javaedge/concurrency/ConcurrencyTest.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/ConcurrencyTest.java
rename to concurrency/src/main/java/com/javaedge/concurrency/ConcurrencyTest.java
index 12867a7..2967863 100755
--- a/src/main/java/com/javaedge/concurrency/ConcurrencyTest.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/ConcurrencyTest.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency;
+package com.javaedge.concurrency;
import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/HttpFilter.java b/concurrency/src/main/java/com/javaedge/concurrency/HttpFilter.java
similarity index 90%
rename from src/main/java/com/javaedge/concurrency/HttpFilter.java
rename to concurrency/src/main/java/com/javaedge/concurrency/HttpFilter.java
index 87dcb65..aec3df4 100755
--- a/src/main/java/com/javaedge/concurrency/HttpFilter.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/HttpFilter.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency;
+package com.javaedge.concurrency;
-import com.javaedge.concurrency.threadLocal.RequestHolder;
+import com.javaedge.concurrency.example.threadLocal.RequestHolder;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.Filter;
diff --git a/src/main/java/com/javaedge/concurrency/HttpInterceptor.java b/concurrency/src/main/java/com/javaedge/concurrency/HttpInterceptor.java
similarity index 87%
rename from src/main/java/com/javaedge/concurrency/HttpInterceptor.java
rename to concurrency/src/main/java/com/javaedge/concurrency/HttpInterceptor.java
index 5172654..4ed6d77 100755
--- a/src/main/java/com/javaedge/concurrency/HttpInterceptor.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/HttpInterceptor.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency;
+package com.javaedge.concurrency;
-import com.javaedge.concurrency.threadLocal.RequestHolder;
+import com.javaedge.concurrency.example.threadLocal.RequestHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
diff --git a/concurrency/src/main/java/com/javaedge/concurrency/ServletInitializer.java b/concurrency/src/main/java/com/javaedge/concurrency/ServletInitializer.java
new file mode 100755
index 0000000..67b0810
--- /dev/null
+++ b/concurrency/src/main/java/com/javaedge/concurrency/ServletInitializer.java
@@ -0,0 +1,13 @@
+package com.javaedge.concurrency;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.support.SpringBootServletInitializer;
+
+public class ServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(ConcurrencyApplication.class);
+ }
+
+}
diff --git a/src/main/java/com/javaedge/concurrency/TestController.java b/concurrency/src/main/java/com/javaedge/concurrency/TestController.java
similarity index 89%
rename from src/main/java/com/javaedge/concurrency/TestController.java
rename to concurrency/src/main/java/com/javaedge/concurrency/TestController.java
index 1429afc..bc49c01 100755
--- a/src/main/java/com/javaedge/concurrency/TestController.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/TestController.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency;
+package com.javaedge.concurrency;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/com/javaedge/concurrency/annoations/NotRecommend.java b/concurrency/src/main/java/com/javaedge/concurrency/annoations/NotRecommend.java
similarity index 86%
rename from src/main/java/com/javaedge/concurrency/annoations/NotRecommend.java
rename to concurrency/src/main/java/com/javaedge/concurrency/annoations/NotRecommend.java
index 51563d1..b1f1268 100755
--- a/src/main/java/com/javaedge/concurrency/annoations/NotRecommend.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/annoations/NotRecommend.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.annoations;
+package com.javaedge.concurrency.annoations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/com/javaedge/concurrency/annoations/NotThreadSafe.java b/concurrency/src/main/java/com/javaedge/concurrency/annoations/NotThreadSafe.java
similarity index 86%
rename from src/main/java/com/javaedge/concurrency/annoations/NotThreadSafe.java
rename to concurrency/src/main/java/com/javaedge/concurrency/annoations/NotThreadSafe.java
index 479d656..3413bd8 100755
--- a/src/main/java/com/javaedge/concurrency/annoations/NotThreadSafe.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/annoations/NotThreadSafe.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.annoations;
+package com.javaedge.concurrency.annoations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/com/javaedge/concurrency/annoations/Recommend.java b/concurrency/src/main/java/com/javaedge/concurrency/annoations/Recommend.java
similarity index 86%
rename from src/main/java/com/javaedge/concurrency/annoations/Recommend.java
rename to concurrency/src/main/java/com/javaedge/concurrency/annoations/Recommend.java
index ca616cc..6e8c350 100755
--- a/src/main/java/com/javaedge/concurrency/annoations/Recommend.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/annoations/Recommend.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.annoations;
+package com.javaedge.concurrency.annoations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/com/javaedge/concurrency/annoations/ThreadSafe.java b/concurrency/src/main/java/com/javaedge/concurrency/annoations/ThreadSafe.java
similarity index 86%
rename from src/main/java/com/javaedge/concurrency/annoations/ThreadSafe.java
rename to concurrency/src/main/java/com/javaedge/concurrency/annoations/ThreadSafe.java
index e248e53..c38ef6f 100755
--- a/src/main/java/com/javaedge/concurrency/annoations/ThreadSafe.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/annoations/ThreadSafe.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.annoations;
+package com.javaedge.concurrency.annoations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/com/javaedge/concurrency/cas/demo/ConcurrentStack.java b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/ConcurrentStack.java
similarity index 93%
rename from src/main/java/com/javaedge/concurrency/cas/demo/ConcurrentStack.java
rename to concurrency/src/main/java/com/javaedge/concurrency/cas/demo/ConcurrentStack.java
index 97e53e9..bcc7fa5 100755
--- a/src/main/java/com/javaedge/concurrency/cas/demo/ConcurrentStack.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/ConcurrentStack.java
@@ -1,6 +1,4 @@
-package main.java.com.javaedge.concurrency.cas.demo;
-
-import com.javaedge.concurrency.cas.demo.Node;
+package com.study.lock.cas.demo;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicStampedReference;
diff --git a/src/main/java/com/javaedge/concurrency/cas/demo/Node.java b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Node.java
similarity index 85%
rename from src/main/java/com/javaedge/concurrency/cas/demo/Node.java
rename to concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Node.java
index 14a1fa4..8efedc0 100755
--- a/src/main/java/com/javaedge/concurrency/cas/demo/Node.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Node.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.cas.demo;
+package com.javaedge.concurrency.cas.demo;
/**
* 存储在栈里面元素 -- 对象
diff --git a/src/main/java/com/javaedge/concurrency/cas/demo/Stack.java b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Stack.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/cas/demo/Stack.java
rename to concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Stack.java
index 36b908e..f118e6c 100644
--- a/src/main/java/com/javaedge/concurrency/cas/demo/Stack.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Stack.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.cas.demo;
+package com.javaedge.concurrency.cas.demo;
import java.util.concurrent.TimeUnit;
diff --git a/src/main/java/com/javaedge/concurrency/cas/demo/Test.java b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Test.java
similarity index 89%
rename from src/main/java/com/javaedge/concurrency/cas/demo/Test.java
rename to concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Test.java
index b90d2ac..026ab23 100755
--- a/src/main/java/com/javaedge/concurrency/cas/demo/Test.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/cas/demo/Test.java
@@ -1,7 +1,4 @@
-package main.java.com.javaedge.concurrency.cas.demo;
-
-import com.javaedge.concurrency.cas.demo.Node;
-import main.java.com.javaedge.concurrency.cas.demo.Stack;
+package com.study.lock.cas.demo;
public class Test {
public static void main(String[] args) throws InterruptedException {
diff --git a/src/main/java/com/javaedge/concurrency/common/closure/ThreadClosure.java b/concurrency/src/main/java/com/javaedge/concurrency/common/closure/ThreadClosure.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/common/closure/ThreadClosure.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/closure/ThreadClosure.java
index eecd77a..d803764 100644
--- a/src/main/java/com/javaedge/concurrency/common/closure/ThreadClosure.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/closure/ThreadClosure.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.common.closure;
+package com.javaedge.concurrency.common.closure;
import org.testng.annotations.Test;
diff --git a/src/main/java/com/javaedge/concurrency/common/communication/ThreadCommunication.java b/concurrency/src/main/java/com/javaedge/concurrency/common/communication/ThreadCommunication.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/common/communication/ThreadCommunication.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/communication/ThreadCommunication.java
index ba94398..a284135 100644
--- a/src/main/java/com/javaedge/concurrency/common/communication/ThreadCommunication.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/communication/ThreadCommunication.java
@@ -1,12 +1,11 @@
-package main.java.com.javaedge.concurrency.common.communication;
+package com.javaedge.concurrency.common.communication;
import java.util.concurrent.locks.LockSupport;
-import org.junit.Test;
+import org.testng.annotations.Test;
/**
* 三种线程协作通信的方式:suspend/resume、wait/notify、park/unpark
- * 原理文档:https://javaedge.blog.csdn.net/article/details/102345871
*
* @author JavaEdge
* @date 2019/10/8
@@ -41,8 +40,7 @@ public void suspendResumeTest() throws Exception {
}
/**
- * 死锁的suspend/resume
- * suspend并不会像wait一样释放锁,容易写出死锁代码
+ * 死锁的suspend/resume。 suspend并不会像wait一样释放锁,容易写出死锁代码
*/
@Test
public void suspendResumeDeadLockTest() throws Exception {
@@ -110,7 +108,6 @@ public void waitNotifyTest() throws Exception {
try {
System.out.println("1、进入等待");
this.wait();
- System.out.println("wait 结束!");
} catch (InterruptedException e) {
e.printStackTrace();
}
@@ -167,15 +164,14 @@ public void waitNotifyDeadLockTest() throws Exception {
public void parkUnparkTest() throws Exception {
// 启动线程
Thread consumerThread = new Thread(() -> {
- // 如果没包子,则进入等待
- if (bunShop == null) {
+ if (bunShop == null) { // 如果没包子,则进入等待
System.out.println("1、进入等待");
LockSupport.park();
}
System.out.println("2、买到包子,回家");
});
consumerThread.start();
- // 3s后,生产一个包子
+ // 3秒之后,生产一个包子
Thread.sleep(3000L);
bunShop = new Object();
LockSupport.unpark(consumerThread);
diff --git a/src/main/java/com/javaedge/concurrency/common/state/ThreadState.java b/concurrency/src/main/java/com/javaedge/concurrency/common/state/ThreadState.java
similarity index 97%
rename from src/main/java/com/javaedge/concurrency/common/state/ThreadState.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/state/ThreadState.java
index f123ad2..e5172af 100644
--- a/src/main/java/com/javaedge/concurrency/common/state/ThreadState.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/state/ThreadState.java
@@ -1,7 +1,7 @@
-package main.java.com.javaedge.concurrency.common.state;
+package com.javaedge.concurrency.common.state;
/**
- * 多线程运行状态切换
+ * 多线程运行状态切换示例
*
* @author JavaEdge
* @date 2019/8/26
diff --git a/src/main/java/com/javaedge/concurrency/common/stop/FlagStopThread.java b/concurrency/src/main/java/com/javaedge/concurrency/common/stop/FlagStopThread.java
similarity index 84%
rename from src/main/java/com/javaedge/concurrency/common/stop/FlagStopThread.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/stop/FlagStopThread.java
index 7201e65..8cfe920 100644
--- a/src/main/java/com/javaedge/concurrency/common/stop/FlagStopThread.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/stop/FlagStopThread.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.common.stop;
+package com.javaedge.concurrency.common.stop;
/**
* 通过状态位来判断
@@ -7,7 +7,6 @@
* @date 2019/8/29
*/
public class FlagStopThread extends Thread {
-
public volatile static boolean flag = true;
public static void main(String[] args) throws InterruptedException {
@@ -21,7 +20,7 @@ public static void main(String[] args) throws InterruptedException {
e.printStackTrace();
}
}).start();
- // 3s后,将状态标志改为False,代表不继续运行
+ // 3秒之后,将状态标志改为False,代表不继续运行
Thread.sleep(3000L);
flag = false;
System.out.println("程序运行结束");
diff --git a/src/main/java/com/javaedge/concurrency/common/stop/StopThread.java b/concurrency/src/main/java/com/javaedge/concurrency/common/stop/StopThread.java
similarity index 73%
rename from src/main/java/com/javaedge/concurrency/common/stop/StopThread.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/stop/StopThread.java
index 501b5b0..3dfbd36 100755
--- a/src/main/java/com/javaedge/concurrency/common/stop/StopThread.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/stop/StopThread.java
@@ -1,6 +1,8 @@
-package main.java.com.javaedge.concurrency.common.stop;
+package com.javaedge.concurrency.common.stop;
/**
+ * 线程stop强制性中止,破坏线程安全的示例
+ *
* @author JavaEdge
* @date 2019/8/26
*/
@@ -13,7 +15,7 @@ public void run() {
// 增加同步锁,确保线程安全
++i;
try {
- // 休眠10s,模拟耗时操作
+ // 休眠10秒,模拟耗时操作
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
@@ -22,6 +24,9 @@ public void run() {
}
}
+ /**
+ * 打印i和j
+ */
public void print() {
System.out.println("i=" + i + " j=" + j);
}
diff --git a/src/main/java/com/javaedge/concurrency/common/stop/ThreadStop.java b/concurrency/src/main/java/com/javaedge/concurrency/common/stop/ThreadStop.java
similarity index 65%
rename from src/main/java/com/javaedge/concurrency/common/stop/ThreadStop.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/stop/ThreadStop.java
index 6fe9aca..288e5a9 100644
--- a/src/main/java/com/javaedge/concurrency/common/stop/ThreadStop.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/stop/ThreadStop.java
@@ -1,6 +1,8 @@
-package main.java.com.javaedge.concurrency.common.stop;
+package com.javaedge.concurrency.common.stop;
/**
+ * 线程stop强制性中止,破坏线程安全的示例
+ *
* @author JavaEdge
* @date 2019/8/26
*/
@@ -10,11 +12,9 @@ public static void main(String[] args) throws InterruptedException {
thread.start();
// 休眠1秒,确保i变量自增成功
Thread.sleep(1000);
- // 错误的终止 线程stop强制性中止,破坏线程安全
-// thread.stop();
-
- // 正确的终止
- thread.interrupt();
+ // 暂停线程
+ // thread.stop(); // 错误的终止
+ thread.interrupt(); // 正确的终止
while (thread.isAlive()) {
// 确保线程已经终止
} // 输出结果
diff --git a/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo.java b/concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo.java
index 5247ab5..085d1d8 100644
--- a/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.common.volatiletest;
+package com.javaedge.concurrency.common.volatiletest;
/**
* @author JavaEdge
diff --git a/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo1.java b/concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo1.java
similarity index 93%
rename from src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo1.java
index 8956eb2..19169ba 100755
--- a/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.common.volatiletest;
+package com.javaedge.concurrency.common.volatiletest;
import java.util.concurrent.TimeUnit;
diff --git a/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo2.java b/concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo2.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo2.java
index 04bb23a..edf43d4 100755
--- a/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/common/volatiletest/VisibilityDemo2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.common.volatiletest;
+package com.javaedge.concurrency.common.volatiletest;
import java.util.concurrent.TimeUnit;
diff --git a/src/main/java/com/javaedge/concurrency/aqs/CountDownLatchExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CountDownLatchExample1.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/aqs/CountDownLatchExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CountDownLatchExample1.java
index 7cbc186..ce28dda 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/CountDownLatchExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CountDownLatchExample1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.aqs;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/aqs/CountDownLatchExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CountDownLatchExample2.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/aqs/CountDownLatchExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CountDownLatchExample2.java
index 2ae325e..65dacf0 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/CountDownLatchExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CountDownLatchExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.aqs;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample1.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample1.java
index 694afd5..f117926 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.aqs;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample2.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample2.java
index 3894267..19024d8 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.aqs;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample3.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample3.java
index 18f0926..90663bc 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/CyclicBarrierExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/CyclicBarrierExample3.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.aqs;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/ForkJoinTaskExample.java
similarity index 86%
rename from src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/ForkJoinTaskExample.java
index 58b2c59..5380f90 100755
--- a/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/ForkJoinTaskExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.forkjoin;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
@@ -6,13 +6,10 @@
import java.util.concurrent.Future;
import java.util.concurrent.RecursiveTask;
-/**
- * @author JavaEdge
- */
@Slf4j
public class ForkJoinTaskExample extends RecursiveTask {
- public static final int THRESHOLD = 2;
+ public static final int threshold = 2;
private int start;
private int end;
@@ -26,7 +23,7 @@ protected Integer compute() {
int sum = 0;
//如果任务足够小就计算任务
- boolean canCompute = (end - start) <= THRESHOLD;
+ boolean canCompute = (end - start) <= threshold;
if (canCompute) {
for (int i = start; i <= end; i++) {
sum += i;
@@ -54,10 +51,10 @@ protected Integer compute() {
public static void main(String[] args) {
ForkJoinPool forkjoinPool = new ForkJoinPool();
- // 生成一个计算任务,计算1+2+3+4
+ //生成一个计算任务,计算1+2+3+4
ForkJoinTaskExample task = new ForkJoinTaskExample(1, 100);
- // 执行一个任务
+ //执行一个任务
Future result = forkjoinPool.submit(task);
try {
diff --git a/src/main/java/com/javaedge/concurrency/furure/jdk/FutureExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/FutureExample.java
similarity index 91%
rename from src/main/java/com/javaedge/concurrency/furure/jdk/FutureExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/FutureExample.java
index 68623dc..54781b7 100755
--- a/src/main/java/com/javaedge/concurrency/furure/jdk/FutureExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/FutureExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.furure.jdk;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
@@ -7,9 +7,6 @@
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-/**
- * @author JavaEdge
- */
@Slf4j
public class FutureExample {
diff --git a/src/main/java/com/javaedge/concurrency/furure/jdk/FutureTaskExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/FutureTaskExample.java
similarity index 78%
rename from src/main/java/com/javaedge/concurrency/furure/jdk/FutureTaskExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/FutureTaskExample.java
index 9f7f70e..2d41e2d 100755
--- a/src/main/java/com/javaedge/concurrency/furure/jdk/FutureTaskExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/FutureTaskExample.java
@@ -1,18 +1,14 @@
-package main.java.com.javaedge.concurrency.furure.jdk;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
-/**
- * @author JavaEdge
- */
@Slf4j
public class FutureTaskExample {
public static void main(String[] args) throws Exception {
- // 创建异步任务
FutureTask futureTask = new FutureTask(new Callable() {
@Override
public String call() throws Exception {
@@ -21,11 +17,10 @@ public String call() throws Exception {
return "Done";
}
});
- // 启动线程
+
new Thread(futureTask).start();
log.info("do something in main");
Thread.sleep(1000);
- // 【阻塞】等待任务执行完毕,并返回结果
String result = futureTask.get();
log.info("result:{}", result);
}
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample1.java
similarity index 83%
rename from src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample1.java
index bcf563b..62c25e2 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample1.java
@@ -1,18 +1,16 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
-/**
- * @author JavaEdge
- */
@Slf4j
public class SemaphoreExample1 {
- private final static int THREAD_COUNT = 20;
+ private final static int threadCount = 20;
public static void main(String[] args) throws Exception {
@@ -20,7 +18,7 @@ public static void main(String[] args) throws Exception {
final Semaphore semaphore = new Semaphore(3);
- for (int i = 0; i < THREAD_COUNT; i++) {
+ for (int i = 0; i < threadCount; i++) {
final int threadNum = i;
exec.execute(() -> {
try {
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample2.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample2.java
index b3c55b3..47ce2b4 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample3.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample3.java
index f9fe06d..9c0ebb7 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample3.java
@@ -1,10 +1,11 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
@Slf4j
public class SemaphoreExample3 {
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample4.java b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample4.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample4.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample4.java
index 29a3658..c73e5af 100755
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample4.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/aqs/SemaphoreExample4.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
+package com.javaedge.concurrency.example.aqs;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample1.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/atomic/AtomicExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample1.java
index f309866..eaba128 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample1.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample2.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/atomic/AtomicExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample2.java
index 42aed35..452bfb4 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample2.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample3.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/atomic/AtomicExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample3.java
index ece69ca..c6e20d3 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample3.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample4.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample4.java
similarity index 81%
rename from src/main/java/com/javaedge/concurrency/atomic/AtomicExample4.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample4.java
index 1238f30..d2b3c25 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample4.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample4.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.atomic.AtomicReference;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample5.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample5.java
similarity index 87%
rename from src/main/java/com/javaedge/concurrency/atomic/AtomicExample5.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample5.java
index 0c37a22..f4cc64c 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample5.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample5.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample6.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample6.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/atomic/AtomicExample6.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample6.java
index b5a4f7b..7d37d40 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/AtomicExample6.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicExample6.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/AtomicTest.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicTest.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/atomic/AtomicTest.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicTest.java
index 8cbc04a..5293174 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/AtomicTest.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/AtomicTest.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
import java.util.concurrent.atomic.AtomicInteger;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/LockCASDemo.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LockCASDemo.java
similarity index 97%
rename from src/main/java/com/javaedge/concurrency/atomic/LockCASDemo.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LockCASDemo.java
index e7c03d9..9c0e3d8 100644
--- a/src/main/java/com/javaedge/concurrency/atomic/LockCASDemo.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LockCASDemo.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
import sun.misc.Unsafe;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/LongAccumulatorDemo.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LongAccumulatorDemo.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/atomic/LongAccumulatorDemo.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LongAccumulatorDemo.java
index d78dc47..dcdf135 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/LongAccumulatorDemo.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LongAccumulatorDemo.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
import java.util.concurrent.atomic.LongAccumulator;
import java.util.function.LongBinaryOperator;
diff --git a/src/main/java/com/javaedge/concurrency/atomic/LongAdderDemo.java b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LongAdderDemo.java
similarity index 97%
rename from src/main/java/com/javaedge/concurrency/atomic/LongAdderDemo.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LongAdderDemo.java
index b415904..16927b1 100755
--- a/src/main/java/com/javaedge/concurrency/atomic/LongAdderDemo.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/atomic/LongAdderDemo.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.atomic;
+package com.javaedge.concurrency.example.atomic;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAdder;
diff --git a/src/main/java/com/javaedge/concurrency/cache/CacheController.java b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/CacheController.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/cache/CacheController.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/cache/CacheController.java
index 321d024..1eb5898 100755
--- a/src/main/java/com/javaedge/concurrency/cache/CacheController.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/CacheController.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.cache;
+package com.javaedge.concurrency.example.cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/com/javaedge/concurrency/cache/GuavaCacheExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/GuavaCacheExample1.java
similarity index 97%
rename from src/main/java/com/javaedge/concurrency/cache/GuavaCacheExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/cache/GuavaCacheExample1.java
index 09d2bad..e66ca99 100755
--- a/src/main/java/com/javaedge/concurrency/cache/GuavaCacheExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/GuavaCacheExample1.java
@@ -1,4 +1,4 @@
-package com.javaedge.concurrency.cache;
+package com.javaedge.concurrency.example.cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
diff --git a/src/main/java/com/javaedge/concurrency/cache/GuavaCacheExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/GuavaCacheExample2.java
similarity index 97%
rename from src/main/java/com/javaedge/concurrency/cache/GuavaCacheExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/cache/GuavaCacheExample2.java
index 5548124..9c192ab 100755
--- a/src/main/java/com/javaedge/concurrency/cache/GuavaCacheExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/GuavaCacheExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.cache;
+package com.javaedge.concurrency.example.cache;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
diff --git a/src/main/java/com/javaedge/concurrency/cache/RedisClient.java b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/RedisClient.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/cache/RedisClient.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/cache/RedisClient.java
index d985089..cf12169 100755
--- a/src/main/java/com/javaedge/concurrency/cache/RedisClient.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/RedisClient.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.cache;
+package com.javaedge.concurrency.example.cache;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
diff --git a/src/main/java/com/javaedge/concurrency/cache/RedisConfig.java b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/RedisConfig.java
similarity index 90%
rename from src/main/java/com/javaedge/concurrency/cache/RedisConfig.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/cache/RedisConfig.java
index 7b7aaed..1100ff7 100755
--- a/src/main/java/com/javaedge/concurrency/cache/RedisConfig.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/cache/RedisConfig.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.cache;
+package com.javaedge.concurrency.example.cache;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/ArrayListExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/ArrayListExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/ArrayListExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/ArrayListExample.java
index 29541aa..b6c4b04 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/ArrayListExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/ArrayListExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample1.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample1.java
index bceba91..e560455 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample2.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample2.java
index 809e505..cfdcad9 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample3.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample3.java
index 8057e44..c23d5fb 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/DateFormatExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/DateFormatExample3.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/HashMapExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/HashMapExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/HashMapExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/HashMapExample.java
index b6eb68b..0220ee6 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/HashMapExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/HashMapExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/HashSetExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/HashSetExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/HashSetExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/HashSetExample.java
index 69b9a57..8d1c90c 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/HashSetExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/HashSetExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/StringExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/StringExample1.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/StringExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/StringExample1.java
index e445ff8..fc41eb8 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/StringExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/StringExample1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/commonunsafe/StringExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/StringExample2.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/commonunsafe/StringExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/StringExample2.java
index 00594c1..98c21ef 100755
--- a/src/main/java/com/javaedge/concurrency/commonunsafe/StringExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/commonUnsafe/StringExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.commonunsafe;
+package com.javaedge.concurrency.example.commonUnsafe;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
@@ -8,9 +8,6 @@
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
-/**
- * @author JavaEdge
- */
@Slf4j
@ThreadSafe
public class StringExample2 {
diff --git a/src/main/java/com/javaedge/concurrency/concurrent/ConcurrentHashMapExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentHashMapExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/concurrent/ConcurrentHashMapExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentHashMapExample.java
index 4a7d217..b8c30c8 100755
--- a/src/main/java/com/javaedge/concurrency/concurrent/ConcurrentHashMapExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentHashMapExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.concurrent;
+package com.javaedge.concurrency.example.concurrent;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/concurrent/ConcurrentSkipListMapExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentSkipListMapExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/concurrent/ConcurrentSkipListMapExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentSkipListMapExample.java
index 1d39bd0..b81407e 100755
--- a/src/main/java/com/javaedge/concurrency/concurrent/ConcurrentSkipListMapExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentSkipListMapExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.concurrent;
+package com.javaedge.concurrency.example.concurrent;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/concurrent/ConcurrentSkipListSetExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentSkipListSetExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/concurrent/ConcurrentSkipListSetExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentSkipListSetExample.java
index b197d1b..1a1833c 100755
--- a/src/main/java/com/javaedge/concurrency/concurrent/ConcurrentSkipListSetExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/ConcurrentSkipListSetExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.concurrent;
+package com.javaedge.concurrency.example.concurrent;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/concurrent/CopyOnWriteArrayListExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/CopyOnWriteArrayListExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/concurrent/CopyOnWriteArrayListExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/CopyOnWriteArrayListExample.java
index de26588..a47d3d6 100755
--- a/src/main/java/com/javaedge/concurrency/concurrent/CopyOnWriteArrayListExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/CopyOnWriteArrayListExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.concurrent;
+package com.javaedge.concurrency.example.concurrent;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/concurrent/CopyOnWriteArraySetExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/CopyOnWriteArraySetExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/concurrent/CopyOnWriteArraySetExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/CopyOnWriteArraySetExample.java
index 7d9c882..29d6aad 100755
--- a/src/main/java/com/javaedge/concurrency/concurrent/CopyOnWriteArraySetExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/concurrent/CopyOnWriteArraySetExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.concurrent;
+package com.javaedge.concurrency.example.concurrent;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/count/CountExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample1.java
similarity index 91%
rename from src/main/java/com/javaedge/concurrency/count/CountExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample1.java
index d3f4817..7cfc0c1 100755
--- a/src/main/java/com/javaedge/concurrency/count/CountExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample1.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.count;
+package com.javaedge.concurrency.example.count;
-import main.java.com.javaedge.concurrency.annoations.NotThreadSafe;
+import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/count/CountExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample2.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/count/CountExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample2.java
index 5499fa8..a386b11 100755
--- a/src/main/java/com/javaedge/concurrency/count/CountExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample2.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.count;
+package com.javaedge.concurrency.example.count;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/count/CountExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample3.java
similarity index 91%
rename from src/main/java/com/javaedge/concurrency/count/CountExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample3.java
index 402cbdb..5a63a03 100755
--- a/src/main/java/com/javaedge/concurrency/count/CountExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample3.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.count;
+package com.javaedge.concurrency.example.count;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/count/CountExample4.java b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample4.java
similarity index 91%
rename from src/main/java/com/javaedge/concurrency/count/CountExample4.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample4.java
index a3b87ae..0d961f0 100755
--- a/src/main/java/com/javaedge/concurrency/count/CountExample4.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/count/CountExample4.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.count;
+package com.javaedge.concurrency.example.count;
-import main.java.com.javaedge.concurrency.annoations.NotThreadSafe;
+import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/deadLock/DeadLock.java b/concurrency/src/main/java/com/javaedge/concurrency/example/deadLock/DeadLock.java
similarity index 72%
rename from src/main/java/com/javaedge/concurrency/deadLock/DeadLock.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/deadLock/DeadLock.java
index 0719f17..304ce17 100755
--- a/src/main/java/com/javaedge/concurrency/deadLock/DeadLock.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/deadLock/DeadLock.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.deadLock;
+package com.javaedge.concurrency.example.deadLock;
import lombok.extern.slf4j.Slf4j;
@@ -9,46 +9,37 @@
* td1睡眠结束后需要锁定o2才能继续执行,而此时o2已被td2锁定;
* td2睡眠结束后需要锁定o1才能继续执行,而此时o1已被td1锁定;
* td1、td2相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。
- *
- * @author JavaEdge
*/
+
@Slf4j
public class DeadLock implements Runnable {
-
public int flag = 1;
-
- /**
- * 静态对象是类的所有对象共享的
- */
- private static final Object O_1 = new Object();
- private static final Object O_2 = new Object();
+ //静态对象是类的所有对象共享的
+ private static Object o1 = new Object(), o2 = new Object();
@Override
public void run() {
-
log.info("flag:{}", flag);
-
if (flag == 1) {
- synchronized (O_1) {
+ synchronized (o1) {
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
- synchronized (O_2) {
+ synchronized (o2) {
log.info("1");
}
}
}
-
if (flag == 0) {
- synchronized (O_2) {
+ synchronized (o2) {
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
- synchronized (O_1) {
+ synchronized (o1) {
log.info("0");
}
}
@@ -60,8 +51,8 @@ public static void main(String[] args) {
DeadLock td2 = new DeadLock();
td1.flag = 1;
td2.flag = 0;
- // td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的
- // td2的run()可能在td1的run()之前运行
+ //td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。
+ //td2的run()可能在td1的run()之前运行
new Thread(td1).start();
new Thread(td2).start();
}
diff --git a/src/main/java/com/javaedge/concurrency/immutable/ImmutableExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample1.java
similarity index 84%
rename from src/main/java/com/javaedge/concurrency/immutable/ImmutableExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample1.java
index 8d83363..5797992 100755
--- a/src/main/java/com/javaedge/concurrency/immutable/ImmutableExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample1.java
@@ -1,7 +1,7 @@
-package main.java.com.javaedge.concurrency.immutable;
+package com.javaedge.concurrency.example.immutable;
import com.google.common.collect.Maps;
-import main.java.com.javaedge.concurrency.annoations.NotThreadSafe;
+import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
diff --git a/src/main/java/com/javaedge/concurrency/immutable/ImmutableExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample2.java
similarity index 74%
rename from src/main/java/com/javaedge/concurrency/immutable/ImmutableExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample2.java
index 5ac8089..eeaf7e1 100755
--- a/src/main/java/com/javaedge/concurrency/immutable/ImmutableExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample2.java
@@ -1,10 +1,9 @@
-package main.java.com.javaedge.concurrency.immutable;
+package com.javaedge.concurrency.example.immutable;
import com.google.common.collect.Maps;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
-
import java.util.Collections;
import java.util.Map;
@@ -23,7 +22,7 @@ public class ImmutableExample2 {
public static void main(String[] args) {
map.put(1, 3);
-// log.info("{}", map.get(1));
+ log.info("{}", map.get(1));
}
}
diff --git a/src/main/java/com/javaedge/concurrency/immutable/ImmutableExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample3.java
similarity index 85%
rename from src/main/java/com/javaedge/concurrency/immutable/ImmutableExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample3.java
index 9c88b70..587cd2d 100755
--- a/src/main/java/com/javaedge/concurrency/immutable/ImmutableExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/immutable/ImmutableExample3.java
@@ -1,9 +1,9 @@
-package main.java.com.javaedge.concurrency.immutable;
+package com.javaedge.concurrency.example.immutable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
@ThreadSafe
public class ImmutableExample3 {
diff --git a/src/main/java/com/javaedge/concurrency/lock/LockDemo.java b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockDemo.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/lock/LockDemo.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockDemo.java
index c7ae504..eb9f657 100644
--- a/src/main/java/com/javaedge/concurrency/lock/LockDemo.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockDemo.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.lock;
+package com.javaedge.concurrency.example.lock;
/**
* 多线程 原子性
diff --git a/src/main/java/com/javaedge/concurrency/lock/LockExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample1.java
similarity index 92%
rename from src/main/java/com/javaedge/concurrency/lock/LockExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample1.java
index 04994ee..8cd84b0 100755
--- a/src/main/java/com/javaedge/concurrency/lock/LockExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample1.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.lock;
+package com.javaedge.concurrency.example.lock;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/lock/LockExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample2.java
similarity index 93%
rename from src/main/java/com/javaedge/concurrency/lock/LockExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample2.java
index af76c79..ae631bb 100755
--- a/src/main/java/com/javaedge/concurrency/lock/LockExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample2.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.lock;
+package com.javaedge.concurrency.example.lock;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
diff --git a/src/main/java/com/javaedge/concurrency/lock/LockExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample3.java
similarity index 95%
rename from src/main/java/com/javaedge/concurrency/lock/LockExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample3.java
index 6afe438..d6c0be0 100755
--- a/src/main/java/com/javaedge/concurrency/lock/LockExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample3.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.lock;
+package com.javaedge.concurrency.example.lock;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/lock/LockExample4.java b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample4.java
similarity index 97%
rename from src/main/java/com/javaedge/concurrency/lock/LockExample4.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample4.java
index b43892f..b775e55 100755
--- a/src/main/java/com/javaedge/concurrency/lock/LockExample4.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample4.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.lock;
+package com.javaedge.concurrency.example.lock;
import java.util.concurrent.locks.StampedLock;
diff --git a/src/main/java/com/javaedge/concurrency/lock/LockExample5.java b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample5.java
similarity index 79%
rename from src/main/java/com/javaedge/concurrency/lock/LockExample5.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample5.java
index 201bc89..cbb9e12 100755
--- a/src/main/java/com/javaedge/concurrency/lock/LockExample5.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample5.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.lock;
+package com.javaedge.concurrency.example.lock;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
@@ -9,9 +9,6 @@
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.StampedLock;
-/**
- * @author JavaEdge
- */
@Slf4j
@ThreadSafe
public class LockExample5 {
@@ -24,13 +21,13 @@ public class LockExample5 {
public static int count = 0;
- private final static StampedLock STAMPED_LOCK = new StampedLock();
+ private final static StampedLock lock = new StampedLock();
public static void main(String[] args) throws Exception {
ExecutorService executorService = Executors.newCachedThreadPool();
final Semaphore semaphore = new Semaphore(threadTotal);
final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
- for (int i = 0; i < clientTotal; i++) {
+ for (int i = 0; i < clientTotal ; i++) {
executorService.execute(() -> {
try {
semaphore.acquire();
@@ -48,11 +45,11 @@ public static void main(String[] args) throws Exception {
}
private static void add() {
- long stamp = STAMPED_LOCK.writeLock();
+ long stamp = lock.writeLock();
try {
count++;
} finally {
- STAMPED_LOCK.unlock(stamp);
+ lock.unlock(stamp);
}
}
}
diff --git a/src/main/java/com/javaedge/concurrency/lock/LockExample6.java b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample6.java
similarity index 93%
rename from src/main/java/com/javaedge/concurrency/lock/LockExample6.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample6.java
index 7afb645..94fae7b 100755
--- a/src/main/java/com/javaedge/concurrency/lock/LockExample6.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/lock/LockExample6.java
@@ -1,13 +1,10 @@
-package main.java.com.javaedge.concurrency.lock;
+package com.javaedge.concurrency.example.lock;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
-/**
- * @author JavaEdge
- */
@Slf4j
public class LockExample6 {
diff --git a/src/main/java/com/javaedge/concurrency/mq/Message.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/Message.java
similarity index 57%
rename from src/main/java/com/javaedge/concurrency/mq/Message.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/Message.java
index f38d170..9e008a6 100644
--- a/src/main/java/com/javaedge/concurrency/mq/Message.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/Message.java
@@ -1,6 +1,9 @@
-package main.java.com.javaedge.concurrency.mq;
+package com.javaedge.concurrency.example.mq;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import java.util.Date;
diff --git a/src/main/java/com/javaedge/concurrency/mq/MqController.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/MqController.java
similarity index 80%
rename from src/main/java/com/javaedge/concurrency/mq/MqController.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/MqController.java
index 0d53cf4..46d8abe 100644
--- a/src/main/java/com/javaedge/concurrency/mq/MqController.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/MqController.java
@@ -1,7 +1,7 @@
-package main.java.com.javaedge.concurrency.mq;
+package com.javaedge.concurrency.example.mq;
-import com.javaedge.concurrency.mq.kafka.KafkaSender;
-import com.javaedge.concurrency.mq.rabbitmq.RabbitMqClient;
+import com.javaedge.concurrency.example.mq.kafka.KafkaSender;
+import com.javaedge.concurrency.example.mq.rabbitmq.RabbitMqClient;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
diff --git a/src/main/java/com/javaedge/concurrency/mq/kafka/KafkaReceiver.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/KafkaReceiver.java
similarity index 89%
rename from src/main/java/com/javaedge/concurrency/mq/kafka/KafkaReceiver.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/KafkaReceiver.java
index bf384b7..14544cd 100644
--- a/src/main/java/com/javaedge/concurrency/mq/kafka/KafkaReceiver.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/KafkaReceiver.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.mq.kafka;
+package com.javaedge.concurrency.example.mq.kafka;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
diff --git a/src/main/java/com/javaedge/concurrency/mq/kafka/KafkaSender.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/KafkaSender.java
similarity index 87%
rename from src/main/java/com/javaedge/concurrency/mq/kafka/KafkaSender.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/KafkaSender.java
index ea6c3c8..927a7f1 100644
--- a/src/main/java/com/javaedge/concurrency/mq/kafka/KafkaSender.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/KafkaSender.java
@@ -1,8 +1,8 @@
-package main.java.com.javaedge.concurrency.mq.kafka;
+package com.javaedge.concurrency.example.mq.kafka;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
-import main.java.com.javaedge.concurrency.mq.Message;
+import com.javaedge.concurrency.example.mq.Message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
diff --git a/src/main/java/com/javaedge/concurrency/mq/kafka/TopicConstants.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/TopicConstants.java
similarity index 73%
rename from src/main/java/com/javaedge/concurrency/mq/kafka/TopicConstants.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/TopicConstants.java
index 07255d6..137fe91 100644
--- a/src/main/java/com/javaedge/concurrency/mq/kafka/TopicConstants.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/kafka/TopicConstants.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.mq.kafka;
+package com.javaedge.concurrency.example.mq.kafka;
/**
* @author JavaEdge
diff --git a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/QueueConstants.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/QueueConstants.java
similarity index 72%
rename from src/main/java/com/javaedge/concurrency/mq/rabbitmq/QueueConstants.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/QueueConstants.java
index 9c43a3a..4bc59cf 100644
--- a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/QueueConstants.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/QueueConstants.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.mq.rabbitmq;
+package com.javaedge.concurrency.example.mq.rabbitmq;
/**
* @author JavaEdge
diff --git a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqClient.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqClient.java
similarity index 89%
rename from src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqClient.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqClient.java
index daef199..b14c6bc 100644
--- a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqClient.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqClient.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.mq.rabbitmq;
+package com.javaedge.concurrency.example.mq.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
diff --git a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqConfig.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqConfig.java
similarity index 86%
rename from src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqConfig.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqConfig.java
index b239e62..e983afc 100644
--- a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqConfig.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqConfig.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.mq.rabbitmq;
+package com.javaedge.concurrency.example.mq.rabbitmq;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
diff --git a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqServer.java b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqServer.java
similarity index 87%
rename from src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqServer.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqServer.java
index aaba62f..2e90678 100644
--- a/src/main/java/com/javaedge/concurrency/mq/rabbitmq/RabbitMqServer.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/mq/rabbitmq/RabbitMqServer.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.mq.rabbitmq;
+package com.javaedge.concurrency.example.mq.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
diff --git a/concurrency/src/main/java/com/javaedge/concurrency/example/package-info.java b/concurrency/src/main/java/com/javaedge/concurrency/example/package-info.java
new file mode 100755
index 0000000..c90d4ba
--- /dev/null
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/package-info.java
@@ -0,0 +1 @@
+package com.javaedge.concurrency.example;
\ No newline at end of file
diff --git a/src/main/java/com/javaedge/concurrency/publish/Escape.java b/concurrency/src/main/java/com/javaedge/concurrency/example/publish/Escape.java
similarity index 68%
rename from src/main/java/com/javaedge/concurrency/publish/Escape.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/publish/Escape.java
index 27958cc..7dec55b 100755
--- a/src/main/java/com/javaedge/concurrency/publish/Escape.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/publish/Escape.java
@@ -1,7 +1,7 @@
-package main.java.com.javaedge.concurrency.publish;
+package com.javaedge.concurrency.example.publish;
-import main.java.com.javaedge.concurrency.annoations.NotRecommend;
-import main.java.com.javaedge.concurrency.annoations.NotThreadSafe;
+import com.javaedge.concurrency.annoations.NotRecommend;
+import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
@Slf4j
diff --git a/src/main/java/com/javaedge/concurrency/publish/UnsafePublish.java b/concurrency/src/main/java/com/javaedge/concurrency/example/publish/UnsafePublish.java
similarity index 81%
rename from src/main/java/com/javaedge/concurrency/publish/UnsafePublish.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/publish/UnsafePublish.java
index 25cc4fe..6c9522d 100755
--- a/src/main/java/com/javaedge/concurrency/publish/UnsafePublish.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/publish/UnsafePublish.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.publish;
+package com.javaedge.concurrency.example.publish;
-import main.java.com.javaedge.concurrency.annoations.NotThreadSafe;
+import com.javaedge.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
diff --git a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample1.java
similarity index 79%
rename from src/main/java/com/javaedge/concurrency/singleton/SingletonExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample1.java
index 0a3de11..c4c3954 100755
--- a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample1.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.singleton;
+package com.javaedge.concurrency.example.singleton;
-import main.java.com.javaedge.concurrency.annoations.NotThreadSafe;
+import com.javaedge.concurrency.annoations.NotThreadSafe;
/**
* 懒汉模式
diff --git a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample2.java
similarity index 76%
rename from src/main/java/com/javaedge/concurrency/singleton/SingletonExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample2.java
index 79ac587..e19499c 100755
--- a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample2.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.singleton;
+package com.javaedge.concurrency.example.singleton;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
/**
* 饿汉模式
diff --git a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample3.java
similarity index 72%
rename from src/main/java/com/javaedge/concurrency/singleton/SingletonExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample3.java
index 0290a10..e0ca068 100755
--- a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample3.java
@@ -1,7 +1,7 @@
-package main.java.com.javaedge.concurrency.singleton;
+package com.javaedge.concurrency.example.singleton;
-import main.java.com.javaedge.concurrency.annoations.NotRecommend;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.NotRecommend;
+import com.javaedge.concurrency.annoations.ThreadSafe;
/**
* 懒汉模式
diff --git a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample4.java b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample4.java
similarity index 89%
rename from src/main/java/com/javaedge/concurrency/singleton/SingletonExample4.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample4.java
index 08414f6..611278d 100755
--- a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample4.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample4.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.singleton;
+package com.javaedge.concurrency.example.singleton;
-import main.java.com.javaedge.concurrency.annoations.NotThreadSafe;
+import com.javaedge.concurrency.annoations.NotThreadSafe;
/**
* 懒汉模式 -》 双重同步锁单例模式
diff --git a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample5.java b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample5.java
similarity index 88%
rename from src/main/java/com/javaedge/concurrency/singleton/SingletonExample5.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample5.java
index ac34369..f4c6dfd 100755
--- a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample5.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample5.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.singleton;
+package com.javaedge.concurrency.example.singleton;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
/**
* 懒汉模式 -》 双重同步锁单例模式
diff --git a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample6.java b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample6.java
similarity index 83%
rename from src/main/java/com/javaedge/concurrency/singleton/SingletonExample6.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample6.java
index 8313698..8d02e5e 100755
--- a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample6.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample6.java
@@ -1,6 +1,6 @@
-package main.java.com.javaedge.concurrency.singleton;
+package com.javaedge.concurrency.example.singleton;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.ThreadSafe;
/**
* 饿汉模式
diff --git a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample7.java b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample7.java
similarity index 76%
rename from src/main/java/com/javaedge/concurrency/singleton/SingletonExample7.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample7.java
index ffb6edb..4475432 100755
--- a/src/main/java/com/javaedge/concurrency/singleton/SingletonExample7.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/singleton/SingletonExample7.java
@@ -1,7 +1,7 @@
-package main.java.com.javaedge.concurrency.singleton;
+package com.javaedge.concurrency.example.singleton;
-import main.java.com.javaedge.concurrency.annoations.Recommend;
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
+import com.javaedge.concurrency.annoations.Recommend;
+import com.javaedge.concurrency.annoations.ThreadSafe;
/**
* 枚举模式:最安全
diff --git a/src/main/java/com/javaedge/concurrency/sync/SynchronizedExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/sync/SynchronizedExample1.java
similarity index 68%
rename from src/main/java/com/javaedge/concurrency/sync/SynchronizedExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/sync/SynchronizedExample1.java
index e1fea73..a5335c5 100755
--- a/src/main/java/com/javaedge/concurrency/sync/SynchronizedExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/sync/SynchronizedExample1.java
@@ -1,23 +1,14 @@
-package main.java.com.javaedge.concurrency.sync;
+package com.javaedge.concurrency.example.sync;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-/**
- *
- * @author JavaEdge
- * @date 2019/10/20
- */
@Slf4j
public class SynchronizedExample1 {
- /**
- * 修饰一个代码块
- *
- * @param j
- */
+ // 修饰一个代码块
public void test1(int j) {
synchronized (this) {
for (int i = 0; i < 10; i++) {
@@ -26,11 +17,7 @@ public void test1(int j) {
}
}
- /**
- * 修饰一个方法
- *
- * @param j
- */
+ // 修饰一个方法
public synchronized void test2(int j) {
for (int i = 0; i < 10; i++) {
log.info("test2 {} - {}", j, i);
@@ -41,7 +28,11 @@ public static void main(String[] args) {
SynchronizedExample1 example1 = new SynchronizedExample1();
SynchronizedExample1 example2 = new SynchronizedExample1();
ExecutorService executorService = Executors.newCachedThreadPool();
- executorService.execute(() -> example1.test2(1));
- executorService.execute(() -> example2.test2(2));
+ executorService.execute(() -> {
+ example1.test2(1);
+ });
+ executorService.execute(() -> {
+ example2.test2(2);
+ });
}
}
diff --git a/src/main/java/com/javaedge/concurrency/sync/SynchronizedExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/sync/SynchronizedExample2.java
similarity index 79%
rename from src/main/java/com/javaedge/concurrency/sync/SynchronizedExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/sync/SynchronizedExample2.java
index 936a33c..36f74a9 100755
--- a/src/main/java/com/javaedge/concurrency/sync/SynchronizedExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/sync/SynchronizedExample2.java
@@ -1,16 +1,10 @@
-package main.java.com.javaedge.concurrency.sync;
+package com.javaedge.concurrency.example.sync;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-
-/**
- *
- * @author JavaEdge
- * @date 2019/10/20
- */
@Slf4j
public class SynchronizedExample2 {
@@ -34,7 +28,11 @@ public static void main(String[] args) {
SynchronizedExample2 example1 = new SynchronizedExample2();
SynchronizedExample2 example2 = new SynchronizedExample2();
ExecutorService executorService = Executors.newCachedThreadPool();
- executorService.execute(() -> example1.test1(1));
- executorService.execute(() -> example2.test1(2));
+ executorService.execute(() -> {
+ example1.test1(1);
+ });
+ executorService.execute(() -> {
+ example2.test1(2);
+ });
}
}
diff --git a/src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample1.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample1.java
index c118ff9..81acbb9 100755
--- a/src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.syncContainer;
+package com.javaedge.concurrency.example.syncContainer;
import com.google.common.collect.Lists;
import com.javaedge.concurrency.annoations.ThreadSafe;
diff --git a/src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample2.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample2.java
index a60e053..951cfbb 100755
--- a/src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.syncContainer;
+package com.javaedge.concurrency.example.syncContainer;
import com.google.common.collect.Sets;
import com.javaedge.concurrency.annoations.ThreadSafe;
diff --git a/src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample3.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample3.java
index 32ec833..e4a7bce 100755
--- a/src/main/java/com/javaedge/concurrency/syncContainer/CollectionsExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/CollectionsExample3.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.syncContainer;
+package com.javaedge.concurrency.example.syncContainer;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/syncContainer/HashTableExample.java b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/HashTableExample.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/syncContainer/HashTableExample.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/HashTableExample.java
index 9bdcba0..fa11482 100755
--- a/src/main/java/com/javaedge/concurrency/syncContainer/HashTableExample.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/HashTableExample.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.syncContainer;
+package com.javaedge.concurrency.example.syncContainer;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/syncContainer/VectorExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample1.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/syncContainer/VectorExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample1.java
index 90344c9..9a3251e 100755
--- a/src/main/java/com/javaedge/concurrency/syncContainer/VectorExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.syncContainer;
+package com.javaedge.concurrency.example.syncContainer;
import com.javaedge.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/syncContainer/VectorExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample2.java
similarity index 93%
rename from src/main/java/com/javaedge/concurrency/syncContainer/VectorExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample2.java
index 0c6742e..80273bd 100755
--- a/src/main/java/com/javaedge/concurrency/syncContainer/VectorExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.syncContainer;
+package com.javaedge.concurrency.example.syncContainer;
import com.javaedge.concurrency.annoations.NotThreadSafe;
diff --git a/src/main/java/com/javaedge/concurrency/syncContainer/VectorExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample3.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/syncContainer/VectorExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample3.java
index f3994c4..427a7ef 100755
--- a/src/main/java/com/javaedge/concurrency/syncContainer/VectorExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/syncContainer/VectorExample3.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.syncContainer;
+package com.javaedge.concurrency.example.syncContainer;
import java.util.Iterator;
import java.util.Vector;
diff --git a/src/main/java/com/javaedge/concurrency/threadLocal/RequestHolder.java b/concurrency/src/main/java/com/javaedge/concurrency/example/threadLocal/RequestHolder.java
similarity index 87%
rename from src/main/java/com/javaedge/concurrency/threadLocal/RequestHolder.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/threadLocal/RequestHolder.java
index 7066bda..5847b29 100755
--- a/src/main/java/com/javaedge/concurrency/threadLocal/RequestHolder.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/threadLocal/RequestHolder.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.threadLocal;
+package com.javaedge.concurrency.example.threadLocal;
/**
*
diff --git a/src/main/java/com/javaedge/concurrency/threadLocal/ThreadLocalController.java b/concurrency/src/main/java/com/javaedge/concurrency/example/threadLocal/ThreadLocalController.java
similarity index 88%
rename from src/main/java/com/javaedge/concurrency/threadLocal/ThreadLocalController.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/threadLocal/ThreadLocalController.java
index 7454d3c..031e5f2 100755
--- a/src/main/java/com/javaedge/concurrency/threadLocal/ThreadLocalController.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/threadLocal/ThreadLocalController.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.threadLocal;
+package com.javaedge.concurrency.example.threadLocal;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample1.java b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample1.java
similarity index 90%
rename from src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample1.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample1.java
index 1417146..20b963e 100755
--- a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample1.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample1.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.threadpool;
+package com.javaedge.concurrency.example.threadpool;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample2.java b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample2.java
similarity index 90%
rename from src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample2.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample2.java
index 9cd3809..5191771 100755
--- a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample2.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample2.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.threadpool;
+package com.javaedge.concurrency.example.threadpool;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample3.java b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample3.java
similarity index 90%
rename from src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample3.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample3.java
index 7930097..255d290 100755
--- a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample3.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample3.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.threadpool;
+package com.javaedge.concurrency.example.threadpool;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample4.java b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample4.java
similarity index 94%
rename from src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample4.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample4.java
index d9fb5e9..869b627 100755
--- a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample4.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample4.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.threadpool;
+package com.javaedge.concurrency.example.threadpool;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample5.java b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample5.java
similarity index 96%
rename from src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample5.java
rename to concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample5.java
index a02ecc4..f9d3462 100644
--- a/src/main/java/com/javaedge/concurrency/threadpool/ThreadPoolExample5.java
+++ b/concurrency/src/main/java/com/javaedge/concurrency/example/threadpool/ThreadPoolExample5.java
@@ -1,4 +1,4 @@
-package main.java.com.javaedge.concurrency.threadpool;
+package com.javaedge.concurrency.example.threadpool;
import org.testng.annotations.Test;
@@ -28,13 +28,16 @@ public void testCommon(ThreadPoolExecutor threadPoolExecutor) throws Exception {
// 测试: 提交15个执行时间需要3秒的任务,看超过大小的2个,对应的处理情况
for (int i = 0; i < 15; i++) {
int n = i;
- threadPoolExecutor.submit(() -> {
- try {
- System.out.println("开始执行:" + n);
- Thread.sleep(3000L);
- System.err.println("执行结束:" + n);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ threadPoolExecutor.submit(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ System.out.println("开始执行:" + n);
+ Thread.sleep(3000L);
+ System.err.println("执行结束:" + n);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
}
});
System.out.println("任务提交成功 :" + i);
diff --git a/src/main/resources/application.properties b/concurrency/src/main/resources/application.properties
similarity index 100%
rename from src/main/resources/application.properties
rename to concurrency/src/main/resources/application.properties
diff --git a/src/test/com/javaedge/concurrency/ConcurrencyApplicationTests.java b/concurrency/src/test/java/com/javaedge/concurrency/ConcurrencyApplicationTests.java
similarity index 68%
rename from src/test/com/javaedge/concurrency/ConcurrencyApplicationTests.java
rename to concurrency/src/test/java/com/javaedge/concurrency/ConcurrencyApplicationTests.java
index 3928bea..ccd5c26 100755
--- a/src/test/com/javaedge/concurrency/ConcurrencyApplicationTests.java
+++ b/concurrency/src/test/java/com/javaedge/concurrency/ConcurrencyApplicationTests.java
@@ -1,4 +1,4 @@
-package test.com.javaedge.concurrency;
+package com.javaedge.concurrency;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -10,10 +10,7 @@
public class ConcurrencyApplicationTests {
@Test
- public void test() {
- Thread thread = new Thread();
- thread.start();
- thread.start();
+ public void contextLoads() {
}
}
diff --git a/mvnw b/mvnw
index df68171..5bf251c 100755
--- a/mvnw
+++ b/mvnw
@@ -55,7 +55,7 @@ case "`uname`" in
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
- # See https://developer.JavaEdge.com/library/mac/qa/qa1170/_index.html
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
diff --git a/pom.xml b/pom.xml
index 19c29f6..ba5b550 100755
--- a/pom.xml
+++ b/pom.xml
@@ -3,9 +3,10 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.javaedge
+ com.mmall
concurrency
0.0.1-SNAPSHOT
+ war
concurrency
Demo project for Spring Boot
@@ -21,7 +22,6 @@
UTF-8
UTF-8
1.8
- com.javaedge.concurrency.ConcurrencyApplication
@@ -37,6 +37,12 @@
test
+
+ org.projectlombok
+ lombok
+ 1.18.4
+
+
com.google.guava
guava
@@ -89,20 +95,6 @@
compile
-
- org.projectlombok
- lombok
-
-
- junit
- junit
-
-
-
- io.netty
- netty-all
- 4.1.15.Final
-
diff --git a/src/main/java/AppendixA/Main.java b/src/main/java/AppendixA/Main.java
deleted file mode 100644
index ebfb1b9..0000000
--- a/src/main/java/AppendixA/Main.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package main.java.AppendixA;
-
-public class Main {
- public static void main(String[] args) {
- System.out.println(Thread.currentThread().getName() + ":BEGIN");
- new MyFrame();
- System.out.println(Thread.currentThread().getName() + ":END");
- }
-}
diff --git a/src/main/java/AppendixA/MyFrame.java b/src/main/java/AppendixA/MyFrame.java
deleted file mode 100644
index 7e8fa87..0000000
--- a/src/main/java/AppendixA/MyFrame.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package main.java.AppendixA;
-
-import javax.swing.JFrame;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.SwingUtilities;
-import java.awt.FlowLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-
-public class MyFrame extends JFrame implements ActionListener {
- private final JLabel label = new JLabel("Event Dispatching Thread Sample");
- private final JButton button = new JButton("countUp");
- public MyFrame() {
- super("MyFrame");
- getContentPane().setLayout(new FlowLayout());
- getContentPane().add(label);
- getContentPane().add(button);
- button.addActionListener(this);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- pack();
- setVisible(true);
- }
- public void actionPerformed(ActionEvent e) {
- if (e.getSource() == button) {
- countUp();
- }
- }
- private void countUp() {
- System.out.println(Thread.currentThread().getName() + ":countUp:BEGIN");
-
- // invokerThread��ָ��ʱ����sleep֮����SwingUtilities.invokeLater
- new Thread("invokerThread") {
- public void run() {
- System.out.println(Thread.currentThread().getName() + ":invokerThread:BEGIN");
- for (int i = 0; i < 10; i++) {
- final String string = "" + i;
- try {
- // executor�ᱻ��Event Dispatching Thread����
- final Runnable executor = new Runnable() {
- public void run() {
- System.out.println(Thread.currentThread().getName() + ":executor:BEGIN:string = " + string);
- label.setText(string);
- System.out.println(Thread.currentThread().getName() + ":executor:END");
- }
- };
-
- // ��Event Dispatching Thread���ó�exector
- SwingUtilities.invokeLater(executor);
-
- Thread.sleep(1000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- System.out.println(Thread.currentThread().getName() + ":invokerThread:END");
- }
- }.start();
-
- System.out.println(Thread.currentThread().getName() + ":countUp:END");
- }
-}
diff --git a/src/main/java/Balking/Q5/TestThread.java b/src/main/java/Balking/Q5/TestThread.java
deleted file mode 100644
index 2c4466f..0000000
--- a/src/main/java/Balking/Q5/TestThread.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package main.java.Balking.Q5;
-
-public class TestThread extends Thread {
- public void run() {
- System.out.print("BEGIN");
- for (int i = 0; i < 50; i++) {
- System.out.print(".");
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- }
- }
- System.out.println("END");
- }
-}
diff --git a/src/main/java/Balking/Sample/ChangerThread.java b/src/main/java/Balking/Sample/ChangerThread.java
deleted file mode 100644
index e058762..0000000
--- a/src/main/java/Balking/Sample/ChangerThread.java
+++ /dev/null
@@ -1,26 +0,0 @@
-//package Balking.Sample;
-//
-//import java.io.IOException;
-//import java.util.Random;
-//
-//public class ChangerThread extends Thread {
-// private Data data;
-// private Random random = new Random();
-// public ChangerThread(String name, Data data) {
-// super(name);
-// this.data = data;
-// }
-// public void run() {
-// try {
-// for (int i = 0; true; i++) {
-// data.change("No." + i); //�����Ϯ�
-// Thread.sleep(random.nextInt(1000)); // ģ��ȥ���������
-// data.save(); // ��ȷ��Ҫ��浵
-// }
-// } catch (IOException e) {
-// e.printStackTrace();
-// } catch (InterruptedException e) {
-// e.printStackTrace();
-// }
-// }
-//}
diff --git a/src/main/java/Immutable/A6_2/Main.java b/src/main/java/Immutable/A6_2/Main.java
deleted file mode 100644
index 1f8fec5..0000000
--- a/src/main/java/Immutable/A6_2/Main.java
+++ /dev/null
@@ -1,31 +0,0 @@
-//package Immutable.A6_2;
-//
-//import person.MutablePerson;
-//import person.ImmutablePerson;
-//
-//public class Main {
-// public static void main(String[] args) {
-// MutablePerson mutable = new MutablePerson("start", "start");
-// new CrackerThread(mutable).start();
-// new CrackerThread(mutable).start();
-// new CrackerThread(mutable).start();
-// for (int i = 0; true; i++) {
-// mutable.setPerson("" + i, "" + i);
-// }
-// }
-//}
-//
-//class CrackerThread extends Thread {
-// private final MutablePerson mutable;
-// public CrackerThread(MutablePerson mutable) {
-// this.mutable = mutable;
-// }
-// public void run() {
-// while (true) {
-// ImmutablePerson immutable = new ImmutablePerson(mutable);
-// if (!immutable.getName().equals(immutable.getAddress())) {
-// System.out.println(currentThread().getName() + " ***** BROKEN ***** " + immutable);
-// }
-// }
-// }
-//}
diff --git a/src/main/java/Immutable/Q2/Main.java b/src/main/java/Immutable/Q2/Main.java
deleted file mode 100644
index 8216518..0000000
--- a/src/main/java/Immutable/Q2/Main.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package main.java.Immutable.Q2;
-
-public class Main {
- public static void main(String[] args) {
- String s = "BAT";
- System.out.println(s.replace('B', 'C')); // 'B'ȡ����'C'
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/LockSupportBlockerTest.java b/src/main/java/com/javaedge/concurrency/LockSupportBlockerTest.java
deleted file mode 100644
index 7b9ae45..0000000
--- a/src/main/java/com/javaedge/concurrency/LockSupportBlockerTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package main.java.com.javaedge.concurrency;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.LockSupport;
-
-public class LockSupportBlockerTest {
- public static void main(String[] args) {
- Thread t3 = new Thread(() -> {
- Thread.currentThread().setName("t3");
- System.out.println(Thread.currentThread().getName() + " park 5 seconds");
- //park 5 seconds, set blocker
- Object blocker = new String("JavaEdge");
- LockSupport.parkUntil(blocker, System.currentTimeMillis() + TimeUnit.MILLISECONDS.convert(5, TimeUnit.SECONDS));
- System.out.println(Thread.currentThread().getName() + " after park");
- });
- t3.start();
-
- try {
- Object t3_blocker = null;
- while (t3_blocker == null) {
- t3_blocker = LockSupport.getBlocker(t3);
- TimeUnit.MILLISECONDS.sleep(10);
- }
- System.out.println("t3 blocker is :" + t3_blocker);
- t3.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/LockSupportTest.java b/src/main/java/com/javaedge/concurrency/LockSupportTest.java
deleted file mode 100644
index 6b3f543..0000000
--- a/src/main/java/com/javaedge/concurrency/LockSupportTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package main.java.com.javaedge.concurrency;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.LockSupport;
-
-/**
- * @author JavaEdge
- */
-public class LockSupportTest {
- public static void main(String[] args) {
- Thread t1 = new Thread() {
- @Override
- public void run() {
- Thread.currentThread().setName("t1");
- System.out.println(Thread.currentThread().getName() + " before park");
- //park 100 seconds
- LockSupport.parkNanos(TimeUnit.NANOSECONDS.convert(100, TimeUnit.SECONDS));
- System.out.println(Thread.currentThread().getName() + " after park");
- }
- };
- Thread t2 = new Thread() {
- @Override
- public void run() {
- try {
- Thread.currentThread().setName("t2");
- TimeUnit.SECONDS.sleep(1);
- System.out.println(Thread.currentThread().getName() + " unpark t1");
- LockSupport.unpark(t1);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- }
- };
- Thread t3 = new Thread() {
- @Override
- public void run() {
- Thread.currentThread().setName("t3");
- System.out.println(Thread.currentThread().getName() + " park 5 seconds");
- //park 5 seconds
- LockSupport.parkUntil(System.currentTimeMillis() + TimeUnit.MILLISECONDS.convert(5,TimeUnit.SECONDS));
- System.out.println(Thread.currentThread().getName() + " after park");
- }
- };
- t1.start();
- t2.start();
- t3.start();
- try {
- t1.join();
- t2.join();
- t3.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/UnsafeTest.java b/src/main/java/com/javaedge/concurrency/UnsafeTest.java
deleted file mode 100644
index 6459a0a..0000000
--- a/src/main/java/com/javaedge/concurrency/UnsafeTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package main.java.com.javaedge.concurrency;
-
-import sun.misc.Unsafe;
-
-import java.lang.reflect.Field;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author JavaEdge
- */
-public class UnsafeTest {
-
- public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
- Field f = Unsafe.class.getDeclaredField("theUnsafe");
- f.setAccessible(true);
- Unsafe unsafe = (Unsafe) f.get(null);
- Thread t1 = new Thread(() -> {
- Thread.currentThread().setName("t1");
- System.out.println(Thread.currentThread().getName() + " before park");
- //park 100 seconds
- unsafe.park(false, TimeUnit.NANOSECONDS.convert(100, TimeUnit.SECONDS));
- System.out.println(Thread.currentThread().getName() + " after park");
- });
- Thread t2 = new Thread() {
- @Override
- public void run() {
- try {
- Thread.currentThread().setName("t2");
- TimeUnit.SECONDS.sleep(1);
- System.out.println(Thread.currentThread().getName() + " unpark t1");
- unsafe.unpark(t1);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- }
- };
- Thread t3 = new Thread() {
- @Override
- public void run() {
- Thread.currentThread().setName("t3");
- System.out.println(Thread.currentThread().getName() + " park 5 seconds");
- //park 5 seconds
- unsafe.park(true, System.currentTimeMillis() + TimeUnit.MILLISECONDS.convert(5,TimeUnit.SECONDS));
- System.out.println(Thread.currentThread().getName() + " after park");
- }
- };
- t1.start();
- t2.start();
- t3.start();
- try {
- t1.join();
- t2.join();
- t3.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/aqs/SampleLock.java b/src/main/java/com/javaedge/concurrency/aqs/SampleLock.java
deleted file mode 100644
index b2334f1..0000000
--- a/src/main/java/com/javaedge/concurrency/aqs/SampleLock.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package main.java.com.javaedge.concurrency.aqs;
-
-/**
- * @author JavaEdge
- * @date 2021/4/21
- */
-class SampleLock {
- volatile int state;
-
- /**
- * 加锁
- */
- void lock() {
- // ...
- state = 1;
- }
-
- /**
- * 解锁
- */
- void unlock() {
- // ...
- state = 0;
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/aqs/SimpleLock.java b/src/main/java/com/javaedge/concurrency/aqs/SimpleLock.java
deleted file mode 100644
index 86d9fdd..0000000
--- a/src/main/java/com/javaedge/concurrency/aqs/SimpleLock.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package main.java.com.javaedge.concurrency.aqs;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.AbstractQueuedSynchronizer;
-
-public class SimpleLock {
- private static class Sync extends AbstractQueuedSynchronizer {
- @Override
- protected boolean tryAcquire(int ignore) {
- return compareAndSetState(0, 1);
- }
-
- @Override
- protected boolean tryRelease(int ignore) {
- setState(0);
- return true;
- }
-
- protected Sync() {
- super();
- }
- }
-
- private final Sync sync = new Sync();
-
- public void lock() {
- sync.acquire(1);
- }
-
- public void unlock() {
- sync.release(1);
- }
-
- private static class MyThread extends Thread {
- private final String name;
- private final SimpleLock lock;
-
- private MyThread(String name, SimpleLock lock) {
- this.name = name;
- this.lock = lock;
- }
-
- @Override
- public void run() {
- try {
- lock.lock();
- System.out.println(name + " get the lock");
- TimeUnit.SECONDS.sleep(2);
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- lock.unlock();
- System.out.println(name + " release the lock");
- }
- }
- }
-
- public static void main(String[] args) {
- final SimpleLock mutex = new SimpleLock();
- MyThread t1 = new MyThread("t1", mutex);
- MyThread t2 = new MyThread("t2", mutex);
- MyThread t3 = new MyThread("t3", mutex);
- t1.start();
- t2.start();
- t3.start();
- try {
- t1.join();
- t2.join();
- t3.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("main thread exit!");
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/MicrowaveOvenPool.java b/src/main/java/com/javaedge/concurrency/aqs/semaphore/MicrowaveOvenPool.java
deleted file mode 100644
index 50ccf81..0000000
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/MicrowaveOvenPool.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
-
-import javax.validation.constraints.NotNull;
-import java.util.List;
-import java.util.Vector;
-import java.util.concurrent.Semaphore;
-import java.util.function.Function;
-
-/**
- * @author JavaEdge
- * @date 2021/4/22
- */
-class Food {
-
- public String name;
-
- private long warmTime;
-
- public Food(String name, long warmTime) {
- this.name = name;
- this.warmTime = warmTime;
- }
-
- public String getName() {
- return name;
- }
-
- public long getWarmTime() {
- return warmTime;
- }
-}
-
-class MicrowaveOven {
-
- public String name;
-
- public MicrowaveOven(String name) {
- this.name = name;
- }
-
- public Food warm(Food food) {
- long second = food.getWarmTime() * 1000;
- try {
- Thread.sleep(second);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- System.out.println(String.format("%s warm %s %d seconds food.", name, food.getName(), food.getWarmTime()));
- return food;
- }
-
- public String getName() {
- return name;
- }
-}
-
-/**
- * @author JavaEdge
- */
-public class MicrowaveOvenPool {
-
- private List microwaveOvens;
-
- private Semaphore semaphore;
-
- public MicrowaveOvenPool(int size, @NotNull List microwaveOvens) {
- this.microwaveOvens = new Vector<>(microwaveOvens);
- this.semaphore = new Semaphore(size);
- }
-
- public Food exec(Function func) {
- MicrowaveOven microwaveOven = null;
- try {
- semaphore.acquire();
- microwaveOven = microwaveOvens.remove(0);
- return func.apply(microwaveOven);
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- microwaveOvens.add(microwaveOven);
- semaphore.release();
- }
- return null;
- }
-
-}
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/ObjPool.java b/src/main/java/com/javaedge/concurrency/aqs/semaphore/ObjPool.java
deleted file mode 100644
index d1397cb..0000000
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/ObjPool.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
-
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.List;
-import java.util.Vector;
-import java.util.concurrent.Semaphore;
-import java.util.function.Function;
-
-/**
- * @author JavaEdge
- * @date 2021/4/22
- */
-@Slf4j
-public class ObjPool {
-
- final List pool;
-
- /**
- * 用信号量实现限流器
- */
- final Semaphore sem;
-
- ObjPool(int size, T t) {
- // 使用线程安全的vector,因为信号量支持多个线程进入临界区
- // 执行 add、remove 方法时可能有并发
- pool = new Vector() {};
- for (int i = 0; i < size; i++) {
- pool.add(t);
- }
- sem = new Semaphore(size);
- }
-
- /**
- * 利用对象池的对象,调用func
- */
- R exec(Function func) throws InterruptedException {
- T t = null;
- // 前10个线程调用acquire()方法,都能继续执行,相当于通过了信号灯
- // 而其他线程则会阻塞在acquire()
- sem.acquire();
- try {
- // 通过信号灯的线程,为每个线程分配一个对象 t
- t = pool.remove(0);
- // 执行回调方法
- R apply = func.apply(t);
- return apply;
- } finally {
- // 执行完回调后,释放对象
- pool.add(t);
-
- /**
- * 更新信号量的计数器
- * 如果此时信号量里计数器的值≤0,说明有线程在等待
- * 此时会自动唤醒等待的线程
- */
- sem.release();
- }
- }
-
- public static void main(String[] args) throws InterruptedException {
- // 创建对象池
- ObjPool pool = new ObjPool<>(10, 2L);
- // 通过对象池获取t,之后执行
- pool.exec(t -> {
- log.info("t:{}", t);
- return t.toString();
- });
- }
-}
-
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample5.java b/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample5.java
deleted file mode 100755
index b462d07..0000000
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample5.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
-
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.Queue;
-
-/**
- * @author JavaEdge
- */
-@Slf4j
-public class SemaphoreExample5 {
- /**
- * 计数器
- */
- int count;
-
- /**
- * 等待队列
- */
- Queue queue;
-
- /**
- * 初始化
- *
- * @param c
- */
- void Semaphore(int c){
- this.count=c;
- }
-
- void down(){
- this.count--;
- if(this.count<0){
- // 将当前线程插入等待队列
- // 阻塞当前线程
- }
- }
- void up(){
- this.count++;
- if(this.count<=0) {
- // 移除等待队列中的某个线程t
- // 唤醒线程t
- }
- }
-
- public static void main(String[] args) {
-
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample6.java b/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample6.java
deleted file mode 100755
index ecdd6ba..0000000
--- a/src/main/java/com/javaedge/concurrency/aqs/semaphore/SemaphoreExample6.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package main.java.com.javaedge.concurrency.aqs.semaphore;
-
-import java.util.concurrent.Semaphore;
-
-/**
- * @author JavaEdge
- */
-public class SemaphoreExample6 {
-
- static int count;
-
- /**
- * 初始化信号量
- */
- static final Semaphore SEMAPHORE = new Semaphore(1);
-
- /**
- * 信号量保证互斥
- */
- static void add() throws InterruptedException {
- // 进入临界区之前执行
- SEMAPHORE.acquire();
- try {
- count += 1;
- } finally {
- // 退出临界区之前执行
- SEMAPHORE.release();
- }
- }
-
- public static void main(String[] args) throws InterruptedException {
- add();
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/common/Nap.java b/src/main/java/com/javaedge/concurrency/common/Nap.java
deleted file mode 100644
index adb7c4c..0000000
--- a/src/main/java/com/javaedge/concurrency/common/Nap.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package main.java.com.javaedge.concurrency.common;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author JavaEdge
- */
-public class Nap {
-
- // Seconds
- public Nap(double t) {
- try {
- TimeUnit.MILLISECONDS.sleep((int) (1000 * t));
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
-
- public Nap(double t, String msg) {
- this(t);
- System.out.println(msg);
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/common/Timer.java b/src/main/java/com/javaedge/concurrency/common/Timer.java
deleted file mode 100644
index 77a3da4..0000000
--- a/src/main/java/com/javaedge/concurrency/common/Timer.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// onjava/Timer.java
-// (c)2017 MindView LLC: see Copyright.txt
-// We make no guarantees that this code is fit for any purpose.
-// Visit http://OnJava8.com for more book information.
-package main.java.com.javaedge.concurrency.common;
-
-import static java.util.concurrent.TimeUnit.NANOSECONDS;
-
-public class Timer {
- private static long start = System.nanoTime();
- public static long duration() {
- return NANOSECONDS.toMillis(
- System.nanoTime() - start);
- }
- public static long duration(Runnable test) {
- Timer timer = new Timer();
- test.run();
- return timer.duration();
- }
-
- public static void main(String[] args) {
- duration();
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/common/stop/PrimeGenerator.java b/src/main/java/com/javaedge/concurrency/common/stop/PrimeGenerator.java
deleted file mode 100644
index 9ac8877..0000000
--- a/src/main/java/com/javaedge/concurrency/common/stop/PrimeGenerator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package main.java.com.javaedge.concurrency.common.stop;
-
-import main.java.com.javaedge.concurrency.annoations.ThreadSafe;
-import lombok.extern.slf4j.Slf4j;
-
-import javax.annotation.concurrent.GuardedBy;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-
-/**
- * @author JavaEdge
- * @date 2021/5/8
- */
-@ThreadSafe
-@Slf4j
-public class PrimeGenerator implements Runnable {
- private static ExecutorService exec = Executors.newCachedThreadPool();
-
- @GuardedBy("this")
- private final List primes = new ArrayList<>();
- private volatile boolean cancelled;
-
- @Override
- public void run() {
- BigInteger p = BigInteger.ONE;
- // 主循环在搜索下一个素数之前会首先检查取消标志
- while (!cancelled) {
- // 持续枚举素数,直到被取消
- p = p.nextProbablePrime();
- synchronized (this) {
- primes.add(p);
- }
- }
- }
-
- public void cancel() {
- cancelled = true;
- }
-
- public synchronized List get() {
- return new ArrayList<>(primes);
- }
-
- static List aSecondOfPrimes() throws InterruptedException {
- PrimeGenerator generator = new PrimeGenerator();
- exec.execute(generator);
- try {
-
- /**
- * 素数生成器通常并不会刚好在运行 1s 后停止,因为在 请求取消的时刻 和 run方法中循环执行下一次检查 之间可能存在延迟
- */
- SECONDS.sleep(1);
- } finally {
- // cancel方法由finally块调用,从而确保即使在调用sleep时被中断,也能取消素数生成器的执行
- // 如果cancel没有被调用,那么搜索素数的线程将永远运行下去,不断消耗CPU时钟周期,且使得JVM不能正常退出
- generator.cancel();
- }
- return generator.get();
- }
-
- public static void main(String[] args) throws InterruptedException {
- log.info("result:{}", aSecondOfPrimes());
- }
-}
-
diff --git a/src/main/java/com/javaedge/concurrency/condition/BlockedQueue.java b/src/main/java/com/javaedge/concurrency/condition/BlockedQueue.java
deleted file mode 100644
index 75936aa..0000000
--- a/src/main/java/com/javaedge/concurrency/condition/BlockedQueue.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package main.java.com.javaedge.concurrency.condition;
-
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * @author JavaEdge
- * @date 2021/4/21
- */
-public class BlockedQueue {
-
- final Lock lock = new ReentrantLock();
-
- /**
- * 条件变量:队列不满
- */
- final Condition notFull = lock.newCondition();
-
- /**
- * 条件变量:队列不空
- */
- final Condition notEmpty = lock.newCondition();
-
- void enq(T x) {
- lock.lock();
- try {
-// while (队列已满) {
- while (x!=null) {
- // 等待队列不满
- notFull.await();
- }
- // 省略入队操作
- // 入队后,通知可出队
- notEmpty.signal();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- lock.unlock();
- }
- }
-
- void deq() throws InterruptedException {
- lock.lock();
- try {
-// while (队列已空) {
- while (true) {
- // 等待队列不空
- notEmpty.await();
- }
- // 省略出队操作
- // 出队后,通知可入队
-// notFull.signal();
- } finally {
- lock.unlock();
- }
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/condition/DubboCondition.java b/src/main/java/com/javaedge/concurrency/condition/DubboCondition.java
deleted file mode 100644
index 17f492c..0000000
--- a/src/main/java/com/javaedge/concurrency/condition/DubboCondition.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package main.java.com.javaedge.concurrency.condition;
-
-import redis.clients.jedis.Response;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * @author JavaEdge
- * @date 2021/4/21
- */
-public class DubboCondition {
-
- Response response;
- /**
- * 创建锁
- */
- private final Lock lock = new ReentrantLock();
-
- /**
- * 创建条件变量
- */
- private final Condition done = lock.newCondition();
-
- /**
- * 调用方通过该方法等待结果
- *
- * @param timeout
- * @return
- */
- Object get(int timeout) throws TimeoutException {
- long start = System.nanoTime();
- // 获取锁
- lock.lock();
- try {
- while (!isDone()) {
- // 获取锁后,通过经典的在循环中调用await()方法来实现等待。
- done.await(timeout, TimeUnit.SECONDS);
- long cur = System.nanoTime();
- if (isDone() ||
- cur - start > timeout) {
- break;
- }
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- // 释放锁
- lock.unlock();
- }
- if (!isDone()) {
- throw new TimeoutException();
- }
-// return returnFromResponse();
- return null;
- }
-
- /**
- * RPC结果是否已经返回
- *
- * @return
- */
- boolean isDone() {
- return response != null;
- }
-
- // RPC结果返回时调用该方法
- private void doReceived(Response res) {
- // 获取锁
- lock.lock();
- try {
- response = res;
- if (done != null) {
- // 通知调用线程,结果已经返回,不用继续等待
- done.signal();
- }
- } finally {
- // 释放锁
- lock.unlock();
- }
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample2.java b/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample2.java
deleted file mode 100755
index 4621040..0000000
--- a/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample2.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package main.java.com.javaedge.concurrency.forkjoin;
-
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.concurrent.ForkJoinPool;
-import java.util.concurrent.RecursiveTask;
-
-/**
- * @author JavaEdge
- */
-@Slf4j
-public class ForkJoinTaskExample2 {
- public static void main(String[] args) {
- // 创建分治任务线程池
- ForkJoinPool forkJoinPool = new ForkJoinPool(4);
-
- // 创建分治任务
- Fibonacci fib = new Fibonacci(30);
-
- // 启动分治任务
- Integer result = forkJoinPool.invoke(fib);
-
- System.out.println(result);
- }
-
- /**
- * 数列的递归任务 需要有返回值
- */
- static class Fibonacci extends RecursiveTask {
- final int n;
-
- Fibonacci(int n) {
- this.n = n;
- }
-
- @Override
- protected Integer compute() {
- if (n <= 1) {
- return n;
- }
-
- Fibonacci f1 = new Fibonacci(n - 1);
-
- // 创建子任务
- f1.fork();
- Fibonacci f2 = new Fibonacci(n - 2);
-
- // 等待子任务结果,并合并结果
- return f2.compute() + f1.join();
- }
- }
-}
diff --git a/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample3.java b/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample3.java
deleted file mode 100755
index a33e195..0000000
--- a/src/main/java/com/javaedge/concurrency/forkjoin/ForkJoinTaskExample3.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package main.java.com.javaedge.concurrency.forkjoin;
-
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ForkJoinPool;
-import java.util.concurrent.RecursiveTask;
-
-/**
- * @author JavaEdge
- */
-@Slf4j
-public class ForkJoinTaskExample3 {
-
- public static void main(String[] args) {
- String[] fc = {"hello world",
- "hello me",
- "hello fork",
- "hello join",
- "fork join in world"};
- //创建ForkJoin线程池
- ForkJoinPool fjp = new ForkJoinPool(3);
- //创建任务
- MR mr = new MR(fc, 0, fc.length);
- //启动任务
- Map result = fjp.invoke(mr);
- //输出结果
- result.forEach((k, v) -> System.out.println(k + ":" + v));
- }
-
- /**
- * MR模拟类
- */
- static class MR extends RecursiveTask