Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
雷学委
java-demo
提交
1f5b93b8
J
java-demo
项目概览
雷学委
/
java-demo
通知
9
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
java-demo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
1f5b93b8
编写于
7月 12, 2021
作者:
雷学委
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
checkin multi-threading demo code
上级
1e7b8a77
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
298 addition
and
0 deletion
+298
-0
leixuewei-multithread/pom.xml
leixuewei-multithread/pom.xml
+76
-0
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/LeiXueWeiRunner.java
...javademo/leixuewei/multiplethreading/LeiXueWeiRunner.java
+27
-0
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/LeiXueWeiRunner01.java
...vademo/leixuewei/multiplethreading/LeiXueWeiRunner01.java
+42
-0
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/LeiXueWeiRunner02.java
...vademo/leixuewei/multiplethreading/LeiXueWeiRunner02.java
+40
-0
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/SimpleWorker.java
...ch/javademo/leixuewei/multiplethreading/SimpleWorker.java
+40
-0
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/Worker.java
...evintech/javademo/leixuewei/multiplethreading/Worker.java
+53
-0
leixuewei-multithread/src/test/java/org/levintech/javademo/leixuewei/multiplethreading/AppTest.java
...vintech/javademo/leixuewei/multiplethreading/AppTest.java
+20
-0
未找到文件。
leixuewei-multithread/pom.xml
0 → 100644
浏览文件 @
1f5b93b8
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
org.levintech.javademo
</groupId>
<artifactId>
leixuewei-multithread
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<name>
leixuewei-multithread
</name>
<description>
雷学委 CSDN/Juejin/知乎/博客/Bilibili demo
</description>
<!-- FIXME change it to the project's website -->
<url>
http://www.example.com
</url>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<maven.compiler.source>
1.8
</maven.compiler.source>
<maven.compiler.target>
1.8
</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.11
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>
maven-clean-plugin
</artifactId>
<version>
3.1.0
</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>
maven-resources-plugin
</artifactId>
<version>
3.0.2
</version>
</plugin>
<plugin>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.8.0
</version>
</plugin>
<plugin>
<artifactId>
maven-surefire-plugin
</artifactId>
<version>
2.22.1
</version>
</plugin>
<plugin>
<artifactId>
maven-jar-plugin
</artifactId>
<version>
3.0.2
</version>
</plugin>
<plugin>
<artifactId>
maven-install-plugin
</artifactId>
<version>
2.5.2
</version>
</plugin>
<plugin>
<artifactId>
maven-deploy-plugin
</artifactId>
<version>
2.8.2
</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>
maven-site-plugin
</artifactId>
<version>
3.7.1
</version>
</plugin>
<plugin>
<artifactId>
maven-project-info-reports-plugin
</artifactId>
<version>
3.0.0
</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/LeiXueWeiRunner.java
0 → 100644
浏览文件 @
1f5b93b8
package
org.levintech.javademo.leixuewei.multiplethreading
;
/**
* Demo一个简单的Worker线程
* 文章:趣味故事掌握多线程基础 - 揭秘大型鞋厂百万并发产能内幕【多图建议收藏】
* https://blog.csdn.net/geeklevin
*
* @author levin
* Created on 2021/6/19
* [雷学委] CSDN/Juejin Code Demo
*/
public
class
LeiXueWeiRunner
{
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
System
.
out
.
println
(
"【雷学委代码Demo】"
);
SimpleWorker
leiXiaoHua
=
new
SimpleWorker
(
"雷小花"
,
57
);
println
(
leiXiaoHua
);
leiXiaoHua
.
start
();
println
(
leiXiaoHua
);
Thread
.
sleep
(
3000
);
println
(
leiXiaoHua
);
}
public
static
void
println
(
SimpleWorker
worker
)
{
System
.
out
.
println
(
"【雷学委代码Demo】工人:"
+
worker
);
}
}
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/LeiXueWeiRunner01.java
0 → 100644
浏览文件 @
1f5b93b8
package
org.levintech.javademo.leixuewei.multiplethreading
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.LinkedBlockingQueue
;
/**
* @author levin
* Created on 2021/6/19
* [雷学委] CSDN/Juejin Code Demo
*/
public
class
LeiXueWeiRunner01
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"【雷学委代码Demo】"
);
LinkedBlockingQueue
<
Integer
>
workItems
=
generateWorkItems
(
10
);
//生成10双鞋子
ConcurrentHashMap
<
String
,
List
<
Integer
>>
status
=
new
ConcurrentHashMap
<>();
Worker
leiXiaoHua
=
new
Worker
(
"雷小花"
,
57
,
workItems
,
status
);
println
(
leiXiaoHua
);
leiXiaoHua
.
start
();
println
(
leiXiaoHua
);
}
public
static
void
println
(
SimpleWorker
worker
)
{
System
.
out
.
println
(
"【雷学委代码Demo】工人:"
+
worker
);
}
public
static
LinkedBlockingQueue
<
Integer
>
generateWorkItems
(
int
totalCount
)
{
LinkedBlockingQueue
<
Integer
>
workItems
=
new
LinkedBlockingQueue
<>();
for
(
int
i
=
1
;
i
<=
totalCount
;
i
++)
{
workItems
.
add
(
i
);
}
return
workItems
;
}
public
static
void
doAndPrintWorkItem
(
LinkedBlockingQueue
<
Integer
>
workItems
)
{
while
(!
workItems
.
isEmpty
())
{
System
.
out
.
println
(
workItems
.
poll
());
}
}
}
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/LeiXueWeiRunner02.java
0 → 100644
浏览文件 @
1f5b93b8
package
org.levintech.javademo.leixuewei.multiplethreading
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.LinkedBlockingQueue
;
import
static
org
.
levintech
.
javademo
.
leixuewei
.
multiplethreading
.
LeiXueWeiRunner01
.
generateWorkItems
;
/**
* 展示百万订单规模鞋子被100个工人正确处理完
* * CSDN文章:趣味故事掌握多线程基础 - 揭秘大型鞋厂百万并发产能内幕【多图建议收藏】
*
* @author levin
* Created on 2021/6/19
* [雷学委] CSDN/Juejin Code Demo
*/
public
class
LeiXueWeiRunner02
{
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
System
.
out
.
println
(
"【雷学委代码Demo】"
);
final
int
totalCount
=
1000000
;
LinkedBlockingQueue
<
Integer
>
workItems
=
generateWorkItems
(
totalCount
);
//生成100万双鞋子
ConcurrentHashMap
<
String
,
List
<
Integer
>>
status
=
new
ConcurrentHashMap
<>();
//doAndPrintWorkItem(workItems);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
//请100工人包装(22天*8小时*57双
Worker
leiXiaoHua
=
new
Worker
(
"雷小花"
+
(
i
+
1
),
22
*
8
*
57
,
workItems
,
status
);
leiXiaoHua
.
start
();
//at the same time, 100 woker do packaging
}
while
(!
workItems
.
isEmpty
())
{
//等待suoyou1所有gongzuo1og工作
System
.
out
.
println
(
"工人在忙工作,不要催,请耐心等待!....剩余:"
+
workItems
.
size
());
Thread
.
sleep
(
3
*
1000
);
}
int
actualTotalCount
=
0
;
for
(
Map
.
Entry
<
String
,
List
<
Integer
>>
entry
:
status
.
entrySet
())
{
actualTotalCount
+=
entry
.
getValue
().
size
();
}
System
.
out
.
println
(
"totalCount="
+
actualTotalCount
);
//百万订单处理完成!
}
}
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/SimpleWorker.java
0 → 100644
浏览文件 @
1f5b93b8
package
org.levintech.javademo.leixuewei.multiplethreading
;
/**
* 一个简单打工人线程
*
* @author levin
* Created on 2021/7/10
* [雷学委] CSDN/Juejin Code Demo
*/
public
class
SimpleWorker
extends
Thread
{
private
String
workerName
;
private
Integer
batchSize
;
public
SimpleWorker
(
String
workerName
,
Integer
batchSize
)
{
this
.
workerName
=
workerName
;
this
.
batchSize
=
batchSize
;
}
@Override
public
String
toString
()
{
return
"SimpleWorker{"
+
"workerName='"
+
workerName
+
",batchSize='"
+
batchSize
+
",state='"
+
super
.
getState
()
+
'}'
;
}
@Override
public
void
run
()
{
System
.
out
.
println
(
"【雷学委代码Demo】工人"
+
toString
());
}
public
String
getWorkerName
()
{
return
workerName
;
}
public
Integer
getBatchSize
()
{
return
batchSize
;
}
}
leixuewei-multithread/src/main/java/org/levintech/javademo/leixuewei/multiplethreading/Worker.java
0 → 100644
浏览文件 @
1f5b93b8
package
org.levintech.javademo.leixuewei.multiplethreading
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.LinkedBlockingQueue
;
/**
* 一个"高级"打工人线程
*
* @author levin
* Created on 2021/7/10
* [雷学委] CSDN/Juejin Code Demo
*/
public
class
Worker
extends
SimpleWorker
{
private
LinkedBlockingQueue
<
Integer
>
workItems
;
private
ConcurrentHashMap
<
String
,
List
<
Integer
>>
status
;
public
Worker
(
String
workerName
,
Integer
batchSize
,
LinkedBlockingQueue
<
Integer
>
workItems
,
ConcurrentHashMap
<
String
,
List
<
Integer
>>
status
)
{
super
(
workerName
,
batchSize
);
this
.
workItems
=
workItems
;
this
.
status
=
status
;
}
@Override
public
String
toString
()
{
return
"Worker{"
+
"workerName='"
+
super
.
getWorkerName
()
+
",batchSize='"
+
super
.
getBatchSize
()
+
",thread="
+
super
.
getName
()
+
",threadId="
+
super
.
getId
()
+
",threadPriority="
+
super
.
getPriority
()
+
",threadState="
+
super
.
getState
()
+
",threadGroup="
+
super
.
getThreadGroup
()
+
",threadUncaughtExceptionHandler="
+
super
.
getUncaughtExceptionHandler
()
+
'}'
;
}
@Override
public
void
run
()
{
System
.
out
.
println
(
"【雷学委代码Demo】工人"
+
toString
());
int
handledNum
=
0
;
List
<
Integer
>
items
=
new
ArrayList
<>();
while
(
handledNum
<
this
.
getBatchSize
()
&&
!
workItems
.
isEmpty
())
{
int
shoeId
=
workItems
.
poll
();
System
.
out
.
println
(
"【雷学委代码Demo】"
+
this
.
getWorkerName
()
+
" 包装了鞋子,序号="
+
shoeId
);
handledNum
++;
items
.
add
(
shoeId
);
}
status
.
put
(
this
.
getWorkerName
(),
items
);
}
}
leixuewei-multithread/src/test/java/org/levintech/javademo/leixuewei/multiplethreading/AppTest.java
0 → 100644
浏览文件 @
1f5b93b8
package
org.levintech.javademo.leixuewei.multiplethreading
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
org.junit.Test
;
/**
* Unit test for simple App.
*/
public
class
AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public
void
shouldAnswerWithTrue
()
{
assertTrue
(
true
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录